stream-chat-react-native-core 5.4.4-beta.1 → 5.5.0-beta.2

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.
Files changed (27) hide show
  1. package/lib/commonjs/components/Message/hooks/useMessageActions.js +17 -15
  2. package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -1
  3. package/lib/commonjs/components/Message/utils/messageActions.js +1 -1
  4. package/lib/commonjs/components/Message/utils/messageActions.js.map +1 -1
  5. package/lib/commonjs/components/MessageList/utils/getReadStates.js +1 -1
  6. package/lib/commonjs/components/MessageList/utils/getReadStates.js.map +1 -1
  7. package/lib/commonjs/native.js +7 -1
  8. package/lib/commonjs/native.js.map +1 -1
  9. package/lib/commonjs/version.json +1 -1
  10. package/lib/module/components/Message/hooks/useMessageActions.js +17 -15
  11. package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -1
  12. package/lib/module/components/Message/utils/messageActions.js +1 -1
  13. package/lib/module/components/Message/utils/messageActions.js.map +1 -1
  14. package/lib/module/components/MessageList/utils/getReadStates.js +1 -1
  15. package/lib/module/components/MessageList/utils/getReadStates.js.map +1 -1
  16. package/lib/module/native.js +7 -1
  17. package/lib/module/native.js.map +1 -1
  18. package/lib/module/version.json +1 -1
  19. package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +1 -1
  20. package/lib/typescript/components/Message/utils/messageActions.d.ts +1 -1
  21. package/lib/typescript/native.d.ts +3 -0
  22. package/package.json +1 -1
  23. package/src/components/Message/hooks/useMessageActions.tsx +17 -14
  24. package/src/components/Message/utils/messageActions.ts +2 -2
  25. package/src/components/MessageList/utils/getReadStates.ts +1 -1
  26. package/src/native.ts +8 -0
  27. package/src/version.json +1 -1
@@ -19,6 +19,8 @@ var _ThemeContext = require("../../../contexts/themeContext/ThemeContext");
19
19
 
20
20
  var _icons = require("../../../icons");
21
21
 
22
+ var _native = require("../../../native");
23
+
22
24
  var _utils = require("../../../utils/utils");
23
25
 
24
26
  var _removeReservedFields = require("../utils/removeReservedFields");
@@ -143,13 +145,13 @@ var useMessageActions = function useMessageActions(_ref) {
143
145
  __self: _this,
144
146
  __source: {
145
147
  fileName: _jsxFileName,
146
- lineNumber: 146,
148
+ lineNumber: 147,
147
149
  columnNumber: 11
148
150
  }
149
151
  }),
150
152
  title: (_message$user3 = message.user) != null && _message$user3.banned ? t('Unblock User') : t('Block User')
151
153
  };
152
- var copyMessage = {
154
+ var copyMessage = _native.setClipboardString !== null ? {
153
155
  action: function action() {
154
156
  setOverlay('none');
155
157
 
@@ -157,7 +159,7 @@ var useMessageActions = function useMessageActions(_ref) {
157
159
  handleCopy(message);
158
160
  }
159
161
 
160
- _reactNative.Clipboard.setString(message.text || '');
162
+ (0, _native.setClipboardString)(message.text || '');
161
163
  },
162
164
  actionType: 'copyMessage',
163
165
  icon: _react["default"].createElement(_icons.Copy, {
@@ -165,12 +167,12 @@ var useMessageActions = function useMessageActions(_ref) {
165
167
  __self: _this,
166
168
  __source: {
167
169
  fileName: _jsxFileName,
168
- lineNumber: 160,
169
- columnNumber: 11
170
+ lineNumber: 162,
171
+ columnNumber: 17
170
172
  }
171
173
  }),
172
174
  title: t('Copy Message')
173
- };
175
+ } : undefined;
174
176
  var deleteMessage = {
175
177
  action: function action() {
176
178
  setOverlay('alert');
@@ -224,7 +226,7 @@ var useMessageActions = function useMessageActions(_ref) {
224
226
  __self: _this,
225
227
  __source: {
226
228
  fileName: _jsxFileName,
227
- lineNumber: 191,
229
+ lineNumber: 194,
228
230
  columnNumber: 11
229
231
  }
230
232
  }),
@@ -249,7 +251,7 @@ var useMessageActions = function useMessageActions(_ref) {
249
251
  __self: _this,
250
252
  __source: {
251
253
  fileName: _jsxFileName,
252
- lineNumber: 205,
254
+ lineNumber: 208,
253
255
  columnNumber: 11
254
256
  }
255
257
  }),
@@ -273,7 +275,7 @@ var useMessageActions = function useMessageActions(_ref) {
273
275
  __self: _this,
274
276
  __source: {
275
277
  fileName: _jsxFileName,
276
- lineNumber: 218,
278
+ lineNumber: 221,
277
279
  columnNumber: 11
278
280
  }
279
281
  }),
@@ -295,7 +297,7 @@ var useMessageActions = function useMessageActions(_ref) {
295
297
  __self: _this,
296
298
  __source: {
297
299
  fileName: _jsxFileName,
298
- lineNumber: 231,
300
+ lineNumber: 234,
299
301
  columnNumber: 11
300
302
  }
301
303
  }),
@@ -375,7 +377,7 @@ var useMessageActions = function useMessageActions(_ref) {
375
377
  __self: _this,
376
378
  __source: {
377
379
  fileName: _jsxFileName,
378
- lineNumber: 284,
380
+ lineNumber: 287,
379
381
  columnNumber: 11
380
382
  }
381
383
  }),
@@ -449,7 +451,7 @@ var useMessageActions = function useMessageActions(_ref) {
449
451
  __self: _this,
450
452
  __source: {
451
453
  fileName: _jsxFileName,
452
- lineNumber: 312,
454
+ lineNumber: 315,
453
455
  columnNumber: 11
454
456
  }
455
457
  }),
@@ -471,7 +473,7 @@ var useMessageActions = function useMessageActions(_ref) {
471
473
  __self: _this,
472
474
  __source: {
473
475
  fileName: _jsxFileName,
474
- lineNumber: 325,
476
+ lineNumber: 328,
475
477
  columnNumber: 11
476
478
  }
477
479
  }),
@@ -515,7 +517,7 @@ var useMessageActions = function useMessageActions(_ref) {
515
517
  __self: _this,
516
518
  __source: {
517
519
  fileName: _jsxFileName,
518
- lineNumber: 340,
520
+ lineNumber: 343,
519
521
  columnNumber: 11
520
522
  }
521
523
  }),
@@ -537,7 +539,7 @@ var useMessageActions = function useMessageActions(_ref) {
537
539
  __self: _this,
538
540
  __source: {
539
541
  fileName: _jsxFileName,
540
- lineNumber: 353,
542
+ lineNumber: 356,
541
543
  columnNumber: 11
542
544
  }
543
545
  }),
@@ -1 +1 @@
1
- {"version":3,"sources":["useMessageActions.tsx"],"names":["useMessageActions","channel","client","enforceUniqueReaction","handleBlock","handleCopy","handleDelete","handleEdit","handleFlag","handleMute","handlePinMessage","handleQuotedReply","handleReactionProp","handleReaction","handleRetry","handleThreadReply","message","onThreadSelect","openThread","removeMessage","retrySendMessage","selectReaction","setEditingState","setOverlay","setQuotedMessageState","supportedReactions","t","updateMessage","theme","colors","accent_blue","accent_red","grey","handleDeleteMessage","handleEditMessage","handleQuotedReplyMessage","handleResendMessage","handleToggleBanUser","handleToggleMuteUser","handleTogglePinMessage","handleToggleReaction","error","type","status","MessageStatusTypes","FAILED","onOpenThread","isMuted","mutedUsers","some","mute","user","id","userID","target","blockUser","action","actionType","icon","title","banned","copyMessage","Clipboard","setString","text","deleteMessage","Alert","alert","onPress","style","cancelable","titleStyle","color","editMessage","pinMessage","unpinMessage","flagMessage","reactionType","undefined","muteUser","quotedReply","retry","messageWithoutReservedFields","threadReply"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Alert, Clipboard } from 'react-native';\n\nimport { useMessageActionHandlers } from './useMessageActionHandlers';\n\nimport type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';\nimport type { ChatContextValue } from '../../../contexts/chatContext/ChatContext';\nimport type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';\nimport type { MessagesContextValue } from '../../../contexts/messagesContext/MessagesContext';\nimport type { OverlayContextValue } from '../../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport type { ThreadContextValue } from '../../../contexts/threadContext/ThreadContext';\nimport type { TranslationContextValue } from '../../../contexts/translationContext/TranslationContext';\nimport {\n Copy,\n CurveLineLeftUp,\n Delete,\n Edit,\n MessageFlag,\n Mute,\n Pin,\n SendUp,\n ThreadReply,\n Unpin,\n UserDelete,\n} from '../../../icons';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { MessageStatusTypes } from '../../../utils/utils';\n\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\nimport type { MessageActionType } from '../../MessageOverlay/MessageActionListItem';\nimport { removeReservedFields } from '../utils/removeReservedFields';\n\nexport const useMessageActions = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n channel,\n client,\n enforceUniqueReaction,\n handleBlock,\n handleCopy,\n handleDelete,\n handleEdit,\n handleFlag,\n handleMute,\n handlePinMessage,\n handleQuotedReply,\n handleReaction: handleReactionProp,\n handleRetry,\n handleThreadReply,\n message,\n onThreadSelect,\n openThread,\n removeMessage,\n retrySendMessage,\n selectReaction,\n setEditingState,\n setOverlay,\n setQuotedMessageState,\n supportedReactions,\n t,\n updateMessage,\n}: Pick<\n MessagesContextValue<StreamChatGenerics>,\n | 'handleBlock'\n | 'handleCopy'\n | 'handleDelete'\n | 'handleEdit'\n | 'handleFlag'\n | 'handleQuotedReply'\n | 'handleMute'\n | 'handlePinMessage'\n | 'handleRetry'\n | 'handleReaction'\n | 'handleThreadReply'\n | 'removeMessage'\n | 'retrySendMessage'\n | 'setEditingState'\n | 'setQuotedMessageState'\n | 'selectReaction'\n | 'supportedReactions'\n | 'updateMessage'\n> &\n Pick<ChannelContextValue<StreamChatGenerics>, 'channel' | 'enforceUniqueReaction'> &\n Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Pick<OverlayContextValue, 'setOverlay'> &\n Pick<ThreadContextValue<StreamChatGenerics>, 'openThread'> &\n Pick<MessageContextValue<StreamChatGenerics>, 'message'> &\n Pick<TranslationContextValue, 't'> & {\n onThreadSelect?: (message: MessageType<StreamChatGenerics>) => void;\n }) => {\n const {\n theme: {\n colors: { accent_blue, accent_red, grey },\n },\n } = useTheme();\n const {\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleTogglePinMessage,\n handleToggleReaction,\n } = useMessageActionHandlers({\n channel,\n client,\n enforceUniqueReaction,\n message,\n removeMessage,\n retrySendMessage,\n setEditingState,\n setQuotedMessageState,\n supportedReactions,\n updateMessage,\n });\n\n const error = message.type === 'error' || message.status === MessageStatusTypes.FAILED;\n\n const onOpenThread = () => {\n if (onThreadSelect) {\n onThreadSelect(message);\n }\n if (openThread) {\n openThread(message);\n }\n };\n\n const isMuted = (client.mutedUsers || []).some(\n (mute) => mute.user.id === client.userID && mute.target.id === message.user?.id,\n );\n\n const blockUser: MessageActionType = {\n action: async () => {\n setOverlay('none');\n if (message.user?.id) {\n if (handleBlock) {\n handleBlock(message);\n }\n\n await handleToggleBanUser();\n }\n },\n actionType: 'blockUser',\n icon: <UserDelete pathFill={grey} />,\n title: message.user?.banned ? t('Unblock User') : t('Block User'),\n };\n\n const copyMessage: MessageActionType = {\n // using depreciated Clipboard from react-native until expo supports the community version or their own\n action: () => {\n setOverlay('none');\n if (handleCopy) {\n handleCopy(message);\n }\n Clipboard.setString(message.text || '');\n },\n actionType: 'copyMessage',\n icon: <Copy pathFill={grey} />,\n title: t('Copy Message'),\n };\n\n const deleteMessage: MessageActionType = {\n action: () => {\n setOverlay('alert');\n if (message.id) {\n Alert.alert(\n t('Delete Message'),\n t('Are you sure you want to permanently delete this message?'),\n [\n { onPress: () => setOverlay('none'), text: t('Cancel') },\n {\n onPress: async () => {\n setOverlay('none');\n if (handleDelete) {\n handleDelete(message);\n }\n\n await handleDeleteMessage();\n },\n style: 'destructive',\n text: t('Delete'),\n },\n ],\n { cancelable: false },\n );\n }\n },\n actionType: 'deleteMessage',\n icon: <Delete pathFill={accent_red} />,\n title: t('Delete Message'),\n titleStyle: { color: accent_red },\n };\n\n const editMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleEdit) {\n handleEdit(message);\n }\n handleEditMessage();\n },\n actionType: 'editMessage',\n icon: <Edit pathFill={grey} />,\n title: t('Edit Message'),\n };\n\n const pinMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handlePinMessage) {\n handlePinMessage(message);\n }\n handleTogglePinMessage();\n },\n actionType: 'pinMessage',\n icon: <Pin height={23} pathFill={grey} width={24} />,\n title: t('Pin to Conversation'),\n };\n\n const unpinMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handlePinMessage) {\n handlePinMessage(message);\n }\n handleTogglePinMessage();\n },\n actionType: 'unpinMessage',\n icon: <Unpin pathFill={grey} />,\n title: t('Unpin from Conversation'),\n };\n\n const flagMessage: MessageActionType = {\n action: () => {\n setOverlay('alert');\n if (message.id) {\n Alert.alert(\n t('Flag Message'),\n t('Do you want to send a copy of this message to a moderator for further investigation?'),\n [\n { onPress: () => setOverlay('none'), text: t('Cancel') },\n {\n onPress: async () => {\n try {\n if (handleFlag) {\n handleFlag(message);\n }\n await client.flagMessage(message.id);\n Alert.alert(\n t('Message flagged'),\n t('The message has been reported to a moderator.'),\n [\n {\n onPress: () => setOverlay('none'),\n text: t('Ok'),\n },\n ],\n );\n } catch (_) {\n Alert.alert(\n t('Cannot Flag Message'),\n t(\n 'Flag action failed either due to a network issue or the message is already flagged',\n ),\n [\n {\n onPress: () => setOverlay('none'),\n text: t('Ok'),\n },\n ],\n );\n }\n },\n text: t('Flag'),\n },\n ],\n { cancelable: false },\n );\n }\n },\n actionType: 'flagMessage',\n icon: <MessageFlag pathFill={grey} />,\n title: t('Flag Message'),\n };\n\n const handleReaction = !error\n ? selectReaction\n ? selectReaction(message)\n : async (reactionType: string) => {\n if (handleReactionProp) {\n handleReactionProp(message, reactionType);\n }\n\n await handleToggleReaction(reactionType);\n }\n : undefined;\n\n const muteUser: MessageActionType = {\n action: async () => {\n setOverlay('none');\n if (message.user?.id) {\n if (handleMute) {\n handleMute(message);\n }\n\n await handleToggleMuteUser();\n }\n },\n actionType: 'muteUser',\n icon: <Mute pathFill={grey} />,\n title: isMuted ? t('Unmute User') : t('Mute User'),\n };\n\n const quotedReply: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleQuotedReply) {\n handleQuotedReply(message);\n }\n handleQuotedReplyMessage();\n },\n actionType: 'quotedReply',\n icon: <CurveLineLeftUp pathFill={grey} />,\n title: t('Reply'),\n };\n\n const retry: MessageActionType = {\n action: async () => {\n setOverlay('none');\n const messageWithoutReservedFields = removeReservedFields(message);\n if (handleRetry) {\n handleRetry(messageWithoutReservedFields);\n }\n\n await handleResendMessage();\n },\n actionType: 'retry',\n icon: <SendUp pathFill={accent_blue} />,\n title: t('Resend'),\n };\n\n const threadReply: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleThreadReply) {\n handleThreadReply(message);\n }\n onOpenThread();\n },\n actionType: 'threadReply',\n icon: <ThreadReply pathFill={grey} />,\n title: t('Thread Reply'),\n };\n\n return {\n blockUser,\n copyMessage,\n deleteMessage,\n editMessage,\n flagMessage,\n handleReaction,\n muteUser,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n };\n};\n"]}
1
+ {"version":3,"sources":["useMessageActions.tsx"],"names":["useMessageActions","channel","client","enforceUniqueReaction","handleBlock","handleCopy","handleDelete","handleEdit","handleFlag","handleMute","handlePinMessage","handleQuotedReply","handleReactionProp","handleReaction","handleRetry","handleThreadReply","message","onThreadSelect","openThread","removeMessage","retrySendMessage","selectReaction","setEditingState","setOverlay","setQuotedMessageState","supportedReactions","t","updateMessage","theme","colors","accent_blue","accent_red","grey","handleDeleteMessage","handleEditMessage","handleQuotedReplyMessage","handleResendMessage","handleToggleBanUser","handleToggleMuteUser","handleTogglePinMessage","handleToggleReaction","error","type","status","MessageStatusTypes","FAILED","onOpenThread","isMuted","mutedUsers","some","mute","user","id","userID","target","blockUser","action","actionType","icon","title","banned","copyMessage","setClipboardString","text","undefined","deleteMessage","Alert","alert","onPress","style","cancelable","titleStyle","color","editMessage","pinMessage","unpinMessage","flagMessage","reactionType","muteUser","quotedReply","retry","messageWithoutReservedFields","threadReply"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Alert } from 'react-native';\n\nimport { useMessageActionHandlers } from './useMessageActionHandlers';\n\nimport type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';\nimport type { ChatContextValue } from '../../../contexts/chatContext/ChatContext';\nimport type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';\nimport type { MessagesContextValue } from '../../../contexts/messagesContext/MessagesContext';\nimport type { OverlayContextValue } from '../../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport type { ThreadContextValue } from '../../../contexts/threadContext/ThreadContext';\nimport type { TranslationContextValue } from '../../../contexts/translationContext/TranslationContext';\nimport {\n Copy,\n CurveLineLeftUp,\n Delete,\n Edit,\n MessageFlag,\n Mute,\n Pin,\n SendUp,\n ThreadReply,\n Unpin,\n UserDelete,\n} from '../../../icons';\nimport { setClipboardString } from '../../../native';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { MessageStatusTypes } from '../../../utils/utils';\n\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\nimport type { MessageActionType } from '../../MessageOverlay/MessageActionListItem';\nimport { removeReservedFields } from '../utils/removeReservedFields';\n\nexport const useMessageActions = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n channel,\n client,\n enforceUniqueReaction,\n handleBlock,\n handleCopy,\n handleDelete,\n handleEdit,\n handleFlag,\n handleMute,\n handlePinMessage,\n handleQuotedReply,\n handleReaction: handleReactionProp,\n handleRetry,\n handleThreadReply,\n message,\n onThreadSelect,\n openThread,\n removeMessage,\n retrySendMessage,\n selectReaction,\n setEditingState,\n setOverlay,\n setQuotedMessageState,\n supportedReactions,\n t,\n updateMessage,\n}: Pick<\n MessagesContextValue<StreamChatGenerics>,\n | 'handleBlock'\n | 'handleCopy'\n | 'handleDelete'\n | 'handleEdit'\n | 'handleFlag'\n | 'handleQuotedReply'\n | 'handleMute'\n | 'handlePinMessage'\n | 'handleRetry'\n | 'handleReaction'\n | 'handleThreadReply'\n | 'removeMessage'\n | 'retrySendMessage'\n | 'setEditingState'\n | 'setQuotedMessageState'\n | 'selectReaction'\n | 'supportedReactions'\n | 'updateMessage'\n> &\n Pick<ChannelContextValue<StreamChatGenerics>, 'channel' | 'enforceUniqueReaction'> &\n Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Pick<OverlayContextValue, 'setOverlay'> &\n Pick<ThreadContextValue<StreamChatGenerics>, 'openThread'> &\n Pick<MessageContextValue<StreamChatGenerics>, 'message'> &\n Pick<TranslationContextValue, 't'> & {\n onThreadSelect?: (message: MessageType<StreamChatGenerics>) => void;\n }) => {\n const {\n theme: {\n colors: { accent_blue, accent_red, grey },\n },\n } = useTheme();\n const {\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleTogglePinMessage,\n handleToggleReaction,\n } = useMessageActionHandlers({\n channel,\n client,\n enforceUniqueReaction,\n message,\n removeMessage,\n retrySendMessage,\n setEditingState,\n setQuotedMessageState,\n supportedReactions,\n updateMessage,\n });\n\n const error = message.type === 'error' || message.status === MessageStatusTypes.FAILED;\n\n const onOpenThread = () => {\n if (onThreadSelect) {\n onThreadSelect(message);\n }\n if (openThread) {\n openThread(message);\n }\n };\n\n const isMuted = (client.mutedUsers || []).some(\n (mute) => mute.user.id === client.userID && mute.target.id === message.user?.id,\n );\n\n const blockUser: MessageActionType = {\n action: async () => {\n setOverlay('none');\n if (message.user?.id) {\n if (handleBlock) {\n handleBlock(message);\n }\n\n await handleToggleBanUser();\n }\n },\n actionType: 'blockUser',\n icon: <UserDelete pathFill={grey} />,\n title: message.user?.banned ? t('Unblock User') : t('Block User'),\n };\n\n const copyMessage: MessageActionType | undefined =\n setClipboardString !== null\n ? {\n action: () => {\n setOverlay('none');\n if (handleCopy) {\n handleCopy(message);\n }\n setClipboardString(message.text || '');\n },\n actionType: 'copyMessage',\n icon: <Copy pathFill={grey} />,\n title: t('Copy Message'),\n }\n : undefined;\n\n const deleteMessage: MessageActionType = {\n action: () => {\n setOverlay('alert');\n if (message.id) {\n Alert.alert(\n t('Delete Message'),\n t('Are you sure you want to permanently delete this message?'),\n [\n { onPress: () => setOverlay('none'), text: t('Cancel') },\n {\n onPress: async () => {\n setOverlay('none');\n if (handleDelete) {\n handleDelete(message);\n }\n\n await handleDeleteMessage();\n },\n style: 'destructive',\n text: t('Delete'),\n },\n ],\n { cancelable: false },\n );\n }\n },\n actionType: 'deleteMessage',\n icon: <Delete pathFill={accent_red} />,\n title: t('Delete Message'),\n titleStyle: { color: accent_red },\n };\n\n const editMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleEdit) {\n handleEdit(message);\n }\n handleEditMessage();\n },\n actionType: 'editMessage',\n icon: <Edit pathFill={grey} />,\n title: t('Edit Message'),\n };\n\n const pinMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handlePinMessage) {\n handlePinMessage(message);\n }\n handleTogglePinMessage();\n },\n actionType: 'pinMessage',\n icon: <Pin height={23} pathFill={grey} width={24} />,\n title: t('Pin to Conversation'),\n };\n\n const unpinMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handlePinMessage) {\n handlePinMessage(message);\n }\n handleTogglePinMessage();\n },\n actionType: 'unpinMessage',\n icon: <Unpin pathFill={grey} />,\n title: t('Unpin from Conversation'),\n };\n\n const flagMessage: MessageActionType = {\n action: () => {\n setOverlay('alert');\n if (message.id) {\n Alert.alert(\n t('Flag Message'),\n t('Do you want to send a copy of this message to a moderator for further investigation?'),\n [\n { onPress: () => setOverlay('none'), text: t('Cancel') },\n {\n onPress: async () => {\n try {\n if (handleFlag) {\n handleFlag(message);\n }\n await client.flagMessage(message.id);\n Alert.alert(\n t('Message flagged'),\n t('The message has been reported to a moderator.'),\n [\n {\n onPress: () => setOverlay('none'),\n text: t('Ok'),\n },\n ],\n );\n } catch (_) {\n Alert.alert(\n t('Cannot Flag Message'),\n t(\n 'Flag action failed either due to a network issue or the message is already flagged',\n ),\n [\n {\n onPress: () => setOverlay('none'),\n text: t('Ok'),\n },\n ],\n );\n }\n },\n text: t('Flag'),\n },\n ],\n { cancelable: false },\n );\n }\n },\n actionType: 'flagMessage',\n icon: <MessageFlag pathFill={grey} />,\n title: t('Flag Message'),\n };\n\n const handleReaction = !error\n ? selectReaction\n ? selectReaction(message)\n : async (reactionType: string) => {\n if (handleReactionProp) {\n handleReactionProp(message, reactionType);\n }\n\n await handleToggleReaction(reactionType);\n }\n : undefined;\n\n const muteUser: MessageActionType = {\n action: async () => {\n setOverlay('none');\n if (message.user?.id) {\n if (handleMute) {\n handleMute(message);\n }\n\n await handleToggleMuteUser();\n }\n },\n actionType: 'muteUser',\n icon: <Mute pathFill={grey} />,\n title: isMuted ? t('Unmute User') : t('Mute User'),\n };\n\n const quotedReply: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleQuotedReply) {\n handleQuotedReply(message);\n }\n handleQuotedReplyMessage();\n },\n actionType: 'quotedReply',\n icon: <CurveLineLeftUp pathFill={grey} />,\n title: t('Reply'),\n };\n\n const retry: MessageActionType = {\n action: async () => {\n setOverlay('none');\n const messageWithoutReservedFields = removeReservedFields(message);\n if (handleRetry) {\n handleRetry(messageWithoutReservedFields);\n }\n\n await handleResendMessage();\n },\n actionType: 'retry',\n icon: <SendUp pathFill={accent_blue} />,\n title: t('Resend'),\n };\n\n const threadReply: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleThreadReply) {\n handleThreadReply(message);\n }\n onOpenThread();\n },\n actionType: 'threadReply',\n icon: <ThreadReply pathFill={grey} />,\n title: t('Thread Reply'),\n };\n\n return {\n blockUser,\n copyMessage,\n deleteMessage,\n editMessage,\n flagMessage,\n handleReaction,\n muteUser,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n };\n};\n"]}
@@ -43,7 +43,7 @@ var messageActions = function messageActions(_ref) {
43
43
  actions.push(editMessage);
44
44
  }
45
45
 
46
- if (message.text && !error) {
46
+ if (copyMessage !== undefined && message.text && !error) {
47
47
  actions.push(copyMessage);
48
48
  }
49
49
 
@@ -1 +1 @@
1
- {"version":3,"sources":["messageActions.ts"],"names":["messageActions","blockUser","copyMessage","deleteMessage","editMessage","error","flagMessage","isMyMessage","isThreadMessage","message","messageReactions","ownCapabilities","pinMessage","quotedReply","retry","threadReply","unpinMessage","undefined","actions","push","quoteMessage","sendReply","updateOwnMessage","updateAnyMessage","text","pinned","banChannelMembers","deleteOwnMessage","deleteAnyMessage"],"mappings":";;;;;AA8BO,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,OAmBkB;AAAA,MAhB9CC,SAgB8C,QAhB9CA,SAgB8C;AAAA,MAf9CC,WAe8C,QAf9CA,WAe8C;AAAA,MAd9CC,aAc8C,QAd9CA,aAc8C;AAAA,MAb9CC,WAa8C,QAb9CA,WAa8C;AAAA,MAZ9CC,KAY8C,QAZ9CA,KAY8C;AAAA,MAX9CC,WAW8C,QAX9CA,WAW8C;AAAA,MAV9CC,WAU8C,QAV9CA,WAU8C;AAAA,MAT9CC,eAS8C,QAT9CA,eAS8C;AAAA,MAR9CC,OAQ8C,QAR9CA,OAQ8C;AAAA,MAP9CC,gBAO8C,QAP9CA,gBAO8C;AAAA,MAN9CC,eAM8C,QAN9CA,eAM8C;AAAA,MAL9CC,UAK8C,QAL9CA,UAK8C;AAAA,MAJ9CC,WAI8C,QAJ9CA,WAI8C;AAAA,MAH9CC,KAG8C,QAH9CA,KAG8C;AAAA,MAF9CC,WAE8C,QAF9CA,WAE8C;AAAA,MAD9CC,YAC8C,QAD9CA,YAC8C;;AAC9C,MAAIN,gBAAJ,EAAsB;AACpB,WAAOO,SAAP;AACD;;AAED,MAAMC,OAAwC,GAAG,EAAjD;;AAEA,MAAIb,KAAK,IAAIE,WAAb,EAA0B;AACxBW,IAAAA,OAAO,CAACC,IAAR,CAAaL,KAAb;AACD;;AAED,MAAIH,eAAe,CAACS,YAAhB,IAAgC,CAACZ,eAAjC,IAAoD,CAACH,KAAzD,EAAgE;AAC9Da,IAAAA,OAAO,CAACC,IAAR,CAAaN,WAAb;AACD;;AAED,MAAIF,eAAe,CAACU,SAAhB,IAA6B,CAACb,eAA9B,IAAiD,CAACH,KAAtD,EAA6D;AAC3Da,IAAAA,OAAO,CAACC,IAAR,CAAaJ,WAAb;AACD;;AAED,MACGR,WAAW,IAAII,eAAe,CAACW,gBAAhC,IACC,CAACf,WAAD,IAAgBI,eAAe,CAACY,gBAFnC,EAGE;AACAL,IAAAA,OAAO,CAACC,IAAR,CAAaf,WAAb;AACD;;AAED,MAAIK,OAAO,CAACe,IAAR,IAAgB,CAACnB,KAArB,EAA4B;AAC1Ba,IAAAA,OAAO,CAACC,IAAR,CAAajB,WAAb;AACD;;AAED,MAAI,CAACK,WAAD,IAAgBI,eAAe,CAACL,WAApC,EAAiD;AAC/CY,IAAAA,OAAO,CAACC,IAAR,CAAab,WAAb;AACD;;AAED,MAAIK,eAAe,CAACC,UAAhB,IAA8B,CAACH,OAAO,CAACgB,MAA3C,EAAmD;AACjDP,IAAAA,OAAO,CAACC,IAAR,CAAaP,UAAb;AACD;;AAED,MAAID,eAAe,CAACC,UAAhB,IAA8BH,OAAO,CAACgB,MAA1C,EAAkD;AAChDP,IAAAA,OAAO,CAACC,IAAR,CAAaH,YAAb;AACD;;AAED,MAAI,CAACT,WAAD,IAAgBI,eAAe,CAACe,iBAApC,EAAuD;AACrDR,IAAAA,OAAO,CAACC,IAAR,CAAalB,SAAb;AACD;;AAED,MACGM,WAAW,IAAII,eAAe,CAACgB,gBAAhC,IACC,CAACpB,WAAD,IAAgBI,eAAe,CAACiB,gBAFnC,EAGE;AACAV,IAAAA,OAAO,CAACC,IAAR,CAAahB,aAAb;AACD;;AAED,SAAOe,OAAP;AACD,CAzEM","sourcesContent":["import type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';\nimport type { OwnCapabilitiesContextValue } from '../../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageActionType } from '../../MessageOverlay/MessageActionListItem';\n\nexport type MessageActionsParams<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n blockUser: MessageActionType;\n copyMessage: MessageActionType;\n deleteMessage: MessageActionType;\n dismissOverlay: () => void;\n editMessage: MessageActionType;\n error: boolean | Error;\n flagMessage: MessageActionType;\n isThreadMessage: boolean;\n messageReactions: boolean;\n muteUser: MessageActionType;\n ownCapabilities: OwnCapabilitiesContextValue;\n pinMessage: MessageActionType;\n quotedReply: MessageActionType;\n retry: MessageActionType;\n threadReply: MessageActionType;\n unpinMessage: MessageActionType;\n} & Pick<MessageContextValue<StreamChatGenerics>, 'message' | 'isMyMessage'>;\n\nexport type MessageActionsProp<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (param: MessageActionsParams<StreamChatGenerics>) => MessageActionType[];\n\nexport const messageActions = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n blockUser,\n copyMessage,\n deleteMessage,\n editMessage,\n error,\n flagMessage,\n isMyMessage,\n isThreadMessage,\n message,\n messageReactions,\n ownCapabilities,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n}: MessageActionsParams<StreamChatGenerics>) => {\n if (messageReactions) {\n return undefined;\n }\n\n const actions: Array<MessageActionType | null> = [];\n\n if (error && isMyMessage) {\n actions.push(retry);\n }\n\n if (ownCapabilities.quoteMessage && !isThreadMessage && !error) {\n actions.push(quotedReply);\n }\n\n if (ownCapabilities.sendReply && !isThreadMessage && !error) {\n actions.push(threadReply);\n }\n\n if (\n (isMyMessage && ownCapabilities.updateOwnMessage) ||\n (!isMyMessage && ownCapabilities.updateAnyMessage)\n ) {\n actions.push(editMessage);\n }\n\n if (message.text && !error) {\n actions.push(copyMessage);\n }\n\n if (!isMyMessage && ownCapabilities.flagMessage) {\n actions.push(flagMessage);\n }\n\n if (ownCapabilities.pinMessage && !message.pinned) {\n actions.push(pinMessage);\n }\n\n if (ownCapabilities.pinMessage && message.pinned) {\n actions.push(unpinMessage);\n }\n\n if (!isMyMessage && ownCapabilities.banChannelMembers) {\n actions.push(blockUser);\n }\n\n if (\n (isMyMessage && ownCapabilities.deleteOwnMessage) ||\n (!isMyMessage && ownCapabilities.deleteAnyMessage)\n ) {\n actions.push(deleteMessage);\n }\n\n return actions;\n};\n"]}
1
+ {"version":3,"sources":["messageActions.ts"],"names":["messageActions","blockUser","copyMessage","deleteMessage","editMessage","error","flagMessage","isMyMessage","isThreadMessage","message","messageReactions","ownCapabilities","pinMessage","quotedReply","retry","threadReply","unpinMessage","undefined","actions","push","quoteMessage","sendReply","updateOwnMessage","updateAnyMessage","text","pinned","banChannelMembers","deleteOwnMessage","deleteAnyMessage"],"mappings":";;;;;AA8BO,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,OAmBkB;AAAA,MAhB9CC,SAgB8C,QAhB9CA,SAgB8C;AAAA,MAf9CC,WAe8C,QAf9CA,WAe8C;AAAA,MAd9CC,aAc8C,QAd9CA,aAc8C;AAAA,MAb9CC,WAa8C,QAb9CA,WAa8C;AAAA,MAZ9CC,KAY8C,QAZ9CA,KAY8C;AAAA,MAX9CC,WAW8C,QAX9CA,WAW8C;AAAA,MAV9CC,WAU8C,QAV9CA,WAU8C;AAAA,MAT9CC,eAS8C,QAT9CA,eAS8C;AAAA,MAR9CC,OAQ8C,QAR9CA,OAQ8C;AAAA,MAP9CC,gBAO8C,QAP9CA,gBAO8C;AAAA,MAN9CC,eAM8C,QAN9CA,eAM8C;AAAA,MAL9CC,UAK8C,QAL9CA,UAK8C;AAAA,MAJ9CC,WAI8C,QAJ9CA,WAI8C;AAAA,MAH9CC,KAG8C,QAH9CA,KAG8C;AAAA,MAF9CC,WAE8C,QAF9CA,WAE8C;AAAA,MAD9CC,YAC8C,QAD9CA,YAC8C;;AAC9C,MAAIN,gBAAJ,EAAsB;AACpB,WAAOO,SAAP;AACD;;AAED,MAAMC,OAAwC,GAAG,EAAjD;;AAEA,MAAIb,KAAK,IAAIE,WAAb,EAA0B;AACxBW,IAAAA,OAAO,CAACC,IAAR,CAAaL,KAAb;AACD;;AAED,MAAIH,eAAe,CAACS,YAAhB,IAAgC,CAACZ,eAAjC,IAAoD,CAACH,KAAzD,EAAgE;AAC9Da,IAAAA,OAAO,CAACC,IAAR,CAAaN,WAAb;AACD;;AAED,MAAIF,eAAe,CAACU,SAAhB,IAA6B,CAACb,eAA9B,IAAiD,CAACH,KAAtD,EAA6D;AAC3Da,IAAAA,OAAO,CAACC,IAAR,CAAaJ,WAAb;AACD;;AAED,MACGR,WAAW,IAAII,eAAe,CAACW,gBAAhC,IACC,CAACf,WAAD,IAAgBI,eAAe,CAACY,gBAFnC,EAGE;AACAL,IAAAA,OAAO,CAACC,IAAR,CAAaf,WAAb;AACD;;AAED,MAAIF,WAAW,KAAKe,SAAhB,IAA6BR,OAAO,CAACe,IAArC,IAA6C,CAACnB,KAAlD,EAAyD;AACvDa,IAAAA,OAAO,CAACC,IAAR,CAAajB,WAAb;AACD;;AAED,MAAI,CAACK,WAAD,IAAgBI,eAAe,CAACL,WAApC,EAAiD;AAC/CY,IAAAA,OAAO,CAACC,IAAR,CAAab,WAAb;AACD;;AAED,MAAIK,eAAe,CAACC,UAAhB,IAA8B,CAACH,OAAO,CAACgB,MAA3C,EAAmD;AACjDP,IAAAA,OAAO,CAACC,IAAR,CAAaP,UAAb;AACD;;AAED,MAAID,eAAe,CAACC,UAAhB,IAA8BH,OAAO,CAACgB,MAA1C,EAAkD;AAChDP,IAAAA,OAAO,CAACC,IAAR,CAAaH,YAAb;AACD;;AAED,MAAI,CAACT,WAAD,IAAgBI,eAAe,CAACe,iBAApC,EAAuD;AACrDR,IAAAA,OAAO,CAACC,IAAR,CAAalB,SAAb;AACD;;AAED,MACGM,WAAW,IAAII,eAAe,CAACgB,gBAAhC,IACC,CAACpB,WAAD,IAAgBI,eAAe,CAACiB,gBAFnC,EAGE;AACAV,IAAAA,OAAO,CAACC,IAAR,CAAahB,aAAb;AACD;;AAED,SAAOe,OAAP;AACD,CAzEM","sourcesContent":["import type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';\nimport type { OwnCapabilitiesContextValue } from '../../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageActionType } from '../../MessageOverlay/MessageActionListItem';\n\nexport type MessageActionsParams<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n blockUser: MessageActionType;\n deleteMessage: MessageActionType;\n dismissOverlay: () => void;\n editMessage: MessageActionType;\n error: boolean | Error;\n flagMessage: MessageActionType;\n isThreadMessage: boolean;\n messageReactions: boolean;\n muteUser: MessageActionType;\n ownCapabilities: OwnCapabilitiesContextValue;\n pinMessage: MessageActionType;\n quotedReply: MessageActionType;\n retry: MessageActionType;\n threadReply: MessageActionType;\n unpinMessage: MessageActionType;\n copyMessage?: MessageActionType;\n} & Pick<MessageContextValue<StreamChatGenerics>, 'message' | 'isMyMessage'>;\n\nexport type MessageActionsProp<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (param: MessageActionsParams<StreamChatGenerics>) => MessageActionType[];\n\nexport const messageActions = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n blockUser,\n copyMessage,\n deleteMessage,\n editMessage,\n error,\n flagMessage,\n isMyMessage,\n isThreadMessage,\n message,\n messageReactions,\n ownCapabilities,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n}: MessageActionsParams<StreamChatGenerics>) => {\n if (messageReactions) {\n return undefined;\n }\n\n const actions: Array<MessageActionType | null> = [];\n\n if (error && isMyMessage) {\n actions.push(retry);\n }\n\n if (ownCapabilities.quoteMessage && !isThreadMessage && !error) {\n actions.push(quotedReply);\n }\n\n if (ownCapabilities.sendReply && !isThreadMessage && !error) {\n actions.push(threadReply);\n }\n\n if (\n (isMyMessage && ownCapabilities.updateOwnMessage) ||\n (!isMyMessage && ownCapabilities.updateAnyMessage)\n ) {\n actions.push(editMessage);\n }\n\n if (copyMessage !== undefined && message.text && !error) {\n actions.push(copyMessage);\n }\n\n if (!isMyMessage && ownCapabilities.flagMessage) {\n actions.push(flagMessage);\n }\n\n if (ownCapabilities.pinMessage && !message.pinned) {\n actions.push(pinMessage);\n }\n\n if (ownCapabilities.pinMessage && message.pinned) {\n actions.push(unpinMessage);\n }\n\n if (!isMyMessage && ownCapabilities.banChannelMembers) {\n actions.push(blockUser);\n }\n\n if (\n (isMyMessage && ownCapabilities.deleteOwnMessage) ||\n (!isMyMessage && ownCapabilities.deleteAnyMessage)\n ) {\n actions.push(deleteMessage);\n }\n\n return actions;\n};\n"]}
@@ -40,7 +40,7 @@ var getReadStates = function getReadStates(clientUserId, messages, read) {
40
40
  return "continue";
41
41
  }
42
42
 
43
- if (message.updated_at < member.last_read) {
43
+ if (message.created_at < member.last_read) {
44
44
  var numberOfReads = Object.keys(read).length;
45
45
 
46
46
  if (numberOfReads === 1) {
@@ -1 +1 @@
1
- {"version":3,"sources":["getReadStates.ts"],"names":["getReadStates","clientUserId","messages","read","readData","reduce","acc","cur","id","filteredMessagesReversed","filter","msg","updated_at","reverse","members","Object","values","memberReadCount","message","length","member","last_read","numberOfReads","keys","currentMessageReadData","userIndex","findIndex","user","splice"],"mappings":";;;;;;;;;;;AAKO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB,CAG3BC,YAH2B,EAI3BC,QAJ2B,EAO3BC,IAP2B,EAQxB;AACH,MAAMC,QAAQ,GAAGF,QAAQ,CAACG,MAAT,CAAgB,UAACC,GAAD,EAAMC,GAAN,EAAc;AAC7C,QAAIA,GAAG,CAACC,EAAR,EAAY;AACVF,MAAAA,GAAG,CAACC,GAAG,CAACC,EAAL,CAAH,GAAc,KAAd;AACD;;AACD,WAAOF,GAAP;AACD,GALgB,EAKd,EALc,CAAjB;AAOA,MAAMG,wBAAwB,GAAGP,QAAQ,CAACQ,MAAT,CAAgB,UAACC,GAAD;AAAA,WAASA,GAAG,CAACC,UAAb;AAAA,GAAhB,EAAyCC,OAAzC,EAAjC;;AAEA,MAAIV,IAAJ,EAAU;AAIR,QAAIF,YAAJ,EAAkB;AAChB,aAAOE,IAAI,CAACF,YAAD,CAAX;AACD;;AACD,QAAMa,OAAO,GAAGC,MAAM,CAACC,MAAP,CAAcb,IAAd,CAAhB;AAKA,QAAIc,eAAe,GAAG,CAAtB;;AASA,yDAAsBR,wBAAtB,wCAAgD;AAAA,UAArCS,OAAqC;;AAM9C,UAAI,CAACJ,OAAO,CAACK,MAAb,EAAqB;AACnBf,QAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuBS,eAAe,IAAI,IAA1C;AACD,OAFD,MAEO;AAAA,mCACMG,MADN;AAOH,cAAI,CAACA,MAAM,CAACC,SAAZ,EAAuB;AACrB;AACD;;AAOD,cAAIH,OAAO,CAACN,UAAR,GAAqBQ,MAAM,CAACC,SAAhC,EAA2C;AAKzC,gBAAMC,aAAa,GAAGP,MAAM,CAACQ,IAAP,CAAYpB,IAAZ,EAAkBgB,MAAxC;;AACA,gBAAIG,aAAa,KAAK,CAAtB,EAAyB;AACvBlB,cAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuB,IAAvB;AACD,aAFD,MAEO;AACL,kBAAMgB,sBAAsB,GAAGpB,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAvC;AACAJ,cAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GACE,OAAOgB,sBAAP,KAAkC,SAAlC,GACIP,eAAe,GAAG,CADtB,GAEIO,sBAAsB,GAAG,CAH/B;AAID;;AACD,gBAAMC,SAAS,GAAGX,OAAO,CAACY,SAAR,CAAkB;AAAA;;AAAA,kBAAGC,IAAH,QAAGA,IAAH;AAAA,qBAAcA,IAAI,CAACnB,EAAL,sBAAYY,MAAM,CAACO,IAAnB,qBAAY,aAAanB,EAAzB,CAAd;AAAA,aAAlB,CAAlB;;AACA,gBAAIiB,SAAS,KAAK,CAAC,CAAnB,EAAsB;AACpBX,cAAAA,OAAO,CAACc,MAAR,CAAeH,SAAf,EAA0B,CAA1B;;AACA,kBAAIH,aAAa,GAAG,CAApB,EAAuB;AACrBL,gBAAAA,eAAe,IAAI,CAAnB;AACD;AACF;AACF;AAtCE;;AACL,8DAAqBH,OAArB,2CAA8B;AAAA,cAAnBM,MAAmB;;AAAA,2BAAnBA,MAAmB;;AAAA,mCAO1B;AA+BH;;AAOD,YAAIhB,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,KAAyB,KAA7B,EAAoC;AAClCJ,UAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuBS,eAAe,IAAI,KAA1C;AACD;AACF;AACF;AACF;;AAED,SAAOb,QAAP;AACD,CArGM","sourcesContent":["import type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';\nimport type { PaginatedMessageListContextValue } from '../../../contexts/paginatedMessageListContext/PaginatedMessageListContext';\nimport type { ThreadContextValue } from '../../../contexts/threadContext/ThreadContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const getReadStates = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n clientUserId: string | undefined,\n messages:\n | PaginatedMessageListContextValue<StreamChatGenerics>['messages']\n | ThreadContextValue<StreamChatGenerics>['threadMessages'],\n read?: ChannelContextValue<StreamChatGenerics>['read'],\n) => {\n const readData = messages.reduce((acc, cur) => {\n if (cur.id) {\n acc[cur.id] = false;\n }\n return acc;\n }, {} as { [key: string]: boolean | number });\n\n const filteredMessagesReversed = messages.filter((msg) => msg.updated_at).reverse();\n\n if (read) {\n /**\n * Channel read state is stored by user and we only care about users who aren't the client\n */\n if (clientUserId) {\n delete read[clientUserId];\n }\n const members = Object.values(read);\n\n /**\n * Track number of members who have read previous messages\n */\n let memberReadCount = 0;\n\n /**\n * Array is in reverse order so newest message is at 0,\n * we find the index of the first message that is older\n * than the last read and then set last read to that, or\n * if there are no newer messages, the first message is\n * last read message.\n */\n for (const message of filteredMessagesReversed) {\n /**\n * If all members are removed then they have read these\n * messages. We do not increment memberReadCount for 1:1\n * chats, so this should be true, not a number in that case.\n */\n if (!members.length) {\n readData[message.id] = memberReadCount || true;\n } else {\n for (const member of members) {\n /**\n * If no last read continue, we can't remove the user\n * because this would mark all messages in a new channel\n * true until at least one other user reads a message.\n */\n if (!member.last_read) {\n continue;\n }\n\n /**\n * If there there is a last read message add the user\n * to the array of last reads for that message and remove\n * the user from the list of users being checked\n */\n if (message.updated_at < member.last_read) {\n /**\n * if this is a direct message the length will be 1\n * as we already deleted the current user from the object\n */\n const numberOfReads = Object.keys(read).length;\n if (numberOfReads === 1) {\n readData[message.id] = true;\n } else {\n const currentMessageReadData = readData[message.id];\n readData[message.id] =\n typeof currentMessageReadData === 'boolean'\n ? memberReadCount + 1\n : currentMessageReadData + 1;\n }\n const userIndex = members.findIndex(({ user }) => user.id === member.user?.id);\n if (userIndex !== -1) {\n members.splice(userIndex, 1);\n if (numberOfReads > 1) {\n memberReadCount += 1;\n }\n }\n }\n }\n\n /**\n * If this is not the last message for a user this will still be\n * set to false. But if other users have read further the number\n * should be how many have read beyond this message.\n */\n if (readData[message.id] === false) {\n readData[message.id] = memberReadCount || false;\n }\n }\n }\n }\n\n return readData;\n};\n"]}
1
+ {"version":3,"sources":["getReadStates.ts"],"names":["getReadStates","clientUserId","messages","read","readData","reduce","acc","cur","id","filteredMessagesReversed","filter","msg","updated_at","reverse","members","Object","values","memberReadCount","message","length","member","last_read","created_at","numberOfReads","keys","currentMessageReadData","userIndex","findIndex","user","splice"],"mappings":";;;;;;;;;;;AAKO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB,CAG3BC,YAH2B,EAI3BC,QAJ2B,EAO3BC,IAP2B,EAQxB;AACH,MAAMC,QAAQ,GAAGF,QAAQ,CAACG,MAAT,CAAgB,UAACC,GAAD,EAAMC,GAAN,EAAc;AAC7C,QAAIA,GAAG,CAACC,EAAR,EAAY;AACVF,MAAAA,GAAG,CAACC,GAAG,CAACC,EAAL,CAAH,GAAc,KAAd;AACD;;AACD,WAAOF,GAAP;AACD,GALgB,EAKd,EALc,CAAjB;AAOA,MAAMG,wBAAwB,GAAGP,QAAQ,CAACQ,MAAT,CAAgB,UAACC,GAAD;AAAA,WAASA,GAAG,CAACC,UAAb;AAAA,GAAhB,EAAyCC,OAAzC,EAAjC;;AAEA,MAAIV,IAAJ,EAAU;AAIR,QAAIF,YAAJ,EAAkB;AAChB,aAAOE,IAAI,CAACF,YAAD,CAAX;AACD;;AACD,QAAMa,OAAO,GAAGC,MAAM,CAACC,MAAP,CAAcb,IAAd,CAAhB;AAKA,QAAIc,eAAe,GAAG,CAAtB;;AASA,yDAAsBR,wBAAtB,wCAAgD;AAAA,UAArCS,OAAqC;;AAM9C,UAAI,CAACJ,OAAO,CAACK,MAAb,EAAqB;AACnBf,QAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuBS,eAAe,IAAI,IAA1C;AACD,OAFD,MAEO;AAAA,mCACMG,MADN;AAOH,cAAI,CAACA,MAAM,CAACC,SAAZ,EAAuB;AACrB;AACD;;AAOD,cAAIH,OAAO,CAACI,UAAR,GAAqBF,MAAM,CAACC,SAAhC,EAA2C;AAKzC,gBAAME,aAAa,GAAGR,MAAM,CAACS,IAAP,CAAYrB,IAAZ,EAAkBgB,MAAxC;;AACA,gBAAII,aAAa,KAAK,CAAtB,EAAyB;AACvBnB,cAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuB,IAAvB;AACD,aAFD,MAEO;AACL,kBAAMiB,sBAAsB,GAAGrB,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAvC;AACAJ,cAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GACE,OAAOiB,sBAAP,KAAkC,SAAlC,GACIR,eAAe,GAAG,CADtB,GAEIQ,sBAAsB,GAAG,CAH/B;AAID;;AACD,gBAAMC,SAAS,GAAGZ,OAAO,CAACa,SAAR,CAAkB;AAAA;;AAAA,kBAAGC,IAAH,QAAGA,IAAH;AAAA,qBAAcA,IAAI,CAACpB,EAAL,sBAAYY,MAAM,CAACQ,IAAnB,qBAAY,aAAapB,EAAzB,CAAd;AAAA,aAAlB,CAAlB;;AACA,gBAAIkB,SAAS,KAAK,CAAC,CAAnB,EAAsB;AACpBZ,cAAAA,OAAO,CAACe,MAAR,CAAeH,SAAf,EAA0B,CAA1B;;AACA,kBAAIH,aAAa,GAAG,CAApB,EAAuB;AACrBN,gBAAAA,eAAe,IAAI,CAAnB;AACD;AACF;AACF;AAtCE;;AACL,8DAAqBH,OAArB,2CAA8B;AAAA,cAAnBM,MAAmB;;AAAA,2BAAnBA,MAAmB;;AAAA,mCAO1B;AA+BH;;AAOD,YAAIhB,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,KAAyB,KAA7B,EAAoC;AAClCJ,UAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuBS,eAAe,IAAI,KAA1C;AACD;AACF;AACF;AACF;;AAED,SAAOb,QAAP;AACD,CArGM","sourcesContent":["import type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';\nimport type { PaginatedMessageListContextValue } from '../../../contexts/paginatedMessageListContext/PaginatedMessageListContext';\nimport type { ThreadContextValue } from '../../../contexts/threadContext/ThreadContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const getReadStates = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n clientUserId: string | undefined,\n messages:\n | PaginatedMessageListContextValue<StreamChatGenerics>['messages']\n | ThreadContextValue<StreamChatGenerics>['threadMessages'],\n read?: ChannelContextValue<StreamChatGenerics>['read'],\n) => {\n const readData = messages.reduce((acc, cur) => {\n if (cur.id) {\n acc[cur.id] = false;\n }\n return acc;\n }, {} as { [key: string]: boolean | number });\n\n const filteredMessagesReversed = messages.filter((msg) => msg.updated_at).reverse();\n\n if (read) {\n /**\n * Channel read state is stored by user and we only care about users who aren't the client\n */\n if (clientUserId) {\n delete read[clientUserId];\n }\n const members = Object.values(read);\n\n /**\n * Track number of members who have read previous messages\n */\n let memberReadCount = 0;\n\n /**\n * Array is in reverse order so newest message is at 0,\n * we find the index of the first message that is older\n * than the last read and then set last read to that, or\n * if there are no newer messages, the first message is\n * last read message.\n */\n for (const message of filteredMessagesReversed) {\n /**\n * If all members are removed then they have read these\n * messages. We do not increment memberReadCount for 1:1\n * chats, so this should be true, not a number in that case.\n */\n if (!members.length) {\n readData[message.id] = memberReadCount || true;\n } else {\n for (const member of members) {\n /**\n * If no last read continue, we can't remove the user\n * because this would mark all messages in a new channel\n * true until at least one other user reads a message.\n */\n if (!member.last_read) {\n continue;\n }\n\n /**\n * If there there is a last read message add the user\n * to the array of last reads for that message and remove\n * the user from the list of users being checked\n */\n if (message.created_at < member.last_read) {\n /**\n * if this is a direct message the length will be 1\n * as we already deleted the current user from the object\n */\n const numberOfReads = Object.keys(read).length;\n if (numberOfReads === 1) {\n readData[message.id] = true;\n } else {\n const currentMessageReadData = readData[message.id];\n readData[message.id] =\n typeof currentMessageReadData === 'boolean'\n ? memberReadCount + 1\n : currentMessageReadData + 1;\n }\n const userIndex = members.findIndex(({ user }) => user.id === member.user?.id);\n if (userIndex !== -1) {\n members.splice(userIndex, 1);\n if (numberOfReads > 1) {\n memberReadCount += 1;\n }\n }\n }\n }\n\n /**\n * If this is not the last message for a user this will still be\n * set to false. But if other users have read further the number\n * should be how many have read beyond this message.\n */\n if (readData[message.id] === false) {\n readData[message.id] = memberReadCount || false;\n }\n }\n }\n }\n\n return readData;\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, "__esModule", {
2
2
  value: true
3
3
  });
4
- exports.triggerHaptic = exports.takePhoto = exports.shareImage = exports.saveFile = exports.registerNativeHandlers = exports.pickDocument = exports.isVideoPackageAvailable = exports.isAudioPackageAvailable = exports.getPhotos = exports.getLocalAssetUri = exports.deleteFile = exports.compressImage = exports.Video = exports.Sound = exports.SDK = exports.NetInfo = exports.FlatList = void 0;
4
+ exports.triggerHaptic = exports.takePhoto = exports.shareImage = exports.setClipboardString = exports.saveFile = exports.registerNativeHandlers = exports.pickDocument = exports.isVideoPackageAvailable = exports.isAudioPackageAvailable = exports.getPhotos = exports.getLocalAssetUri = exports.deleteFile = exports.compressImage = exports.Video = exports.Sound = exports.SDK = exports.NetInfo = exports.FlatList = void 0;
5
5
 
6
6
  var _reactNative = require("react-native");
7
7
 
@@ -28,6 +28,8 @@ var pickDocument = fail;
28
28
  exports.pickDocument = pickDocument;
29
29
  var saveFile = fail;
30
30
  exports.saveFile = saveFile;
31
+ var setClipboardString = fail;
32
+ exports.setClipboardString = setClipboardString;
31
33
  var shareImage = fail;
32
34
  exports.shareImage = shareImage;
33
35
  var takePhoto = fail;
@@ -97,6 +99,10 @@ var registerNativeHandlers = function registerNativeHandlers(handlers) {
97
99
  if (handlers.Video) {
98
100
  exports.Video = Video = handlers.Video;
99
101
  }
102
+
103
+ if (handlers.setClipboardString !== undefined) {
104
+ exports.setClipboardString = setClipboardString = handlers.setClipboardString;
105
+ }
100
106
  };
101
107
 
102
108
  exports.registerNativeHandlers = registerNativeHandlers;
@@ -1 +1 @@
1
- {"version":3,"sources":["native.ts"],"names":["fail","Error","compressImage","deleteFile","getLocalAssetUri","getPhotos","FlatList","DefaultFlatList","NetInfo","addEventListener","fetch","pickDocument","saveFile","shareImage","takePhoto","triggerHaptic","SDK","Sound","Video","registerNativeHandlers","handlers","undefined","isVideoPackageAvailable","isAudioPackageAvailable","Player","initializeSound"],"mappings":";;;;;AACA;;AAMA,IAAMA,IAAI,GAAG,SAAPA,IAAO,GAAM;AACjB,QAAMC,KAAK,CACT,mGADS,CAAX;AAGD,CAJD;;AAiBO,IAAIC,aAA4B,GAAGF,IAAnC;;AAGA,IAAIG,UAAsB,GAAGH,IAA7B;;AAGA,IAAII,gBAAkC,GAAGJ,IAAzC;;AASA,IAAIK,SAAoB,GAAGL,IAA3B;;AAOA,IAAIM,QAAQ,GAAGC,qBAAf;;AAEA,IAAIC,OAAgB,GAAG;AAC5BC,EAAAA,gBAAgB,EAAET,IADU;AAE5BU,EAAAA,KAAK,EAAEV;AAFqB,CAAvB;;AAWA,IAAIW,YAA0B,GAAGX,IAAjC;;AAOA,IAAIY,QAAkB,GAAGZ,IAAzB;;AAOA,IAAIa,UAAsB,GAAGb,IAA7B;;AASA,IAAIc,SAAoB,GAAGd,IAA3B;;AAWA,IAAIe,aAA4B,GAAGf,IAAnC;;AAwBA,IAAIgB,GAAJ;;AA8CA,IAAIC,KAAJ;;AA2CA,IAAIC,KAAJ;;;AAmBA,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACC,QAAD,EAAwB;AAC5D,MAAIA,QAAQ,CAAClB,aAAb,EAA4B;AAC1B,4BAAAA,aAAa,GAAGkB,QAAQ,CAAClB,aAAzB;AACD;;AAED,MAAIkB,QAAQ,CAACjB,UAAb,EAAyB;AACvB,yBAAAA,UAAU,GAAGiB,QAAQ,CAACjB,UAAtB;AACD;;AAED,MAAIiB,QAAQ,CAACd,QAAb,EAAuB;AACrB,uBAAAA,QAAQ,GAAGc,QAAQ,CAACd,QAApB;AACD;;AACD,MAAIc,QAAQ,CAACZ,OAAb,EAAsB;AACpB,sBAAAA,OAAO,GAAGY,QAAQ,CAACZ,OAAnB;AACD;;AAED,MAAIY,QAAQ,CAAChB,gBAAb,EAA+B;AAC7B,+BAAAA,gBAAgB,GAAGgB,QAAQ,CAAChB,gBAA5B;AACD;;AAED,MAAIgB,QAAQ,CAACf,SAAb,EAAwB;AACtB,wBAAAA,SAAS,GAAGe,QAAQ,CAACf,SAArB;AACD;;AAED,MAAIe,QAAQ,CAACT,YAAb,EAA2B;AACzB,2BAAAA,YAAY,GAAGS,QAAQ,CAACT,YAAxB;AACD;;AAED,MAAIS,QAAQ,CAACR,QAAb,EAAuB;AACrB,uBAAAA,QAAQ,GAAGQ,QAAQ,CAACR,QAApB;AACD;;AAED,MAAIQ,QAAQ,CAACJ,GAAb,EAAkB;AAChB,kBAAAA,GAAG,GAAGI,QAAQ,CAACJ,GAAf;AACD;;AAED,MAAII,QAAQ,CAACP,UAAT,KAAwBQ,SAA5B,EAAuC;AACrC,yBAAAR,UAAU,GAAGO,QAAQ,CAACP,UAAtB;AACD;;AAED,MAAIO,QAAQ,CAACH,KAAb,EAAoB;AAClB,oBAAAA,KAAK,GAAGG,QAAQ,CAACH,KAAjB;AACD;;AAED,MAAIG,QAAQ,CAACN,SAAb,EAAwB;AACtB,wBAAAA,SAAS,GAAGM,QAAQ,CAACN,SAArB;AACD;;AAED,MAAIM,QAAQ,CAACL,aAAb,EAA4B;AAC1B,4BAAAA,aAAa,GAAGK,QAAQ,CAACL,aAAzB;AACD;;AAED,MAAIK,QAAQ,CAACF,KAAb,EAAoB;AAClB,oBAAAA,KAAK,GAAGE,QAAQ,CAACF,KAAjB;AACD;AACF,CAvDM;;;;AAyDA,IAAMI,uBAAuB,GAAG,SAA1BA,uBAA0B;AAAA,SAAM,CAAC,CAACJ,KAAR;AAAA,CAAhC;;;;AACA,IAAMK,uBAAuB,GAAG,SAA1BA,uBAA0B;AAAA,SAAM,CAAC,CAACN,KAAK,CAACO,MAAR,IAAkB,CAAC,CAACP,KAAK,CAACQ,eAAhC;AAAA,CAAhC","sourcesContent":["import type React from 'react';\nimport { FlatList as DefaultFlatList, StyleProp, ViewStyle } from 'react-native';\n\nimport type { NetInfoSubscription } from '@react-native-community/netinfo';\n\nimport type { Asset, File } from './types/types';\n\nconst fail = () => {\n throw Error(\n 'Native handler was not registered, you should import stream-chat-expo or stream-chat-react-native',\n );\n};\n\ntype CompressImage = ({\n compressImageQuality,\n height,\n uri,\n width,\n}: {\n compressImageQuality: number;\n height: number;\n uri: string;\n width: number;\n}) => Promise<string> | never;\nexport let compressImage: CompressImage = fail;\n\ntype DeleteFile = ({ uri }: { uri: string }) => Promise<boolean> | never;\nexport let deleteFile: DeleteFile = fail;\n\ntype GetLocalAssetUri = (uriOrAssetId: string) => Promise<string> | never;\nexport let getLocalAssetUri: GetLocalAssetUri = fail;\n\ntype GetPhotos = ({ after, first }: { first: number; after?: string }) =>\n | Promise<{\n assets: Array<Omit<Asset, 'source'> & { source: 'picker' }>;\n endCursor: string;\n hasNextPage: boolean;\n }>\n | never;\nexport let getPhotos: GetPhotos = fail;\n\ntype NetInfo = {\n addEventListener: (listener: (isConnected: boolean) => void) => NetInfoSubscription | never;\n fetch: (requestedInterface?: string | undefined) => Promise<boolean> | never;\n};\n\nexport let FlatList = DefaultFlatList;\n\nexport let NetInfo: NetInfo = {\n addEventListener: fail,\n fetch: fail,\n};\n\ntype PickDocument = ({ maxNumberOfFiles }: { maxNumberOfFiles?: number }) =>\n | Promise<{\n cancelled: boolean;\n docs?: File[];\n }>\n | never;\nexport let pickDocument: PickDocument = fail;\n\ntype SaveFileOptions = {\n fileName: string;\n fromUrl: string;\n};\ntype SaveFile = (options: SaveFileOptions) => Promise<string> | never;\nexport let saveFile: SaveFile = fail;\n\ntype ShareOptions = {\n type?: string;\n url?: string;\n};\ntype ShareImage = (options: ShareOptions) => Promise<boolean> | never;\nexport let shareImage: ShareImage = fail;\n\ntype Photo =\n | (Omit<Asset, 'source'> & {\n cancelled: false;\n source: 'camera';\n })\n | { cancelled: true };\ntype TakePhoto = (options: { compressImageQuality?: number }) => Promise<Photo> | never;\nexport let takePhoto: TakePhoto = fail;\n\ntype HapticFeedbackMethod =\n | 'impactHeavy'\n | 'impactLight'\n | 'impactMedium'\n | 'notificationError'\n | 'notificationSuccess'\n | 'notificationWarning'\n | 'selection';\ntype TriggerHaptic = (method: HapticFeedbackMethod) => void | never;\nexport let triggerHaptic: TriggerHaptic = fail;\n\nexport type PlaybackStatus = {\n didJustFinish: boolean;\n durationMillis: number;\n error: string;\n isBuffering: boolean;\n isLoaded: boolean;\n isLooping: boolean;\n isPlaying: boolean;\n positionMillis: number;\n};\n\nexport type AVPlaybackStatusToSet = {\n isLooping: boolean;\n isMuted: boolean;\n positionMillis: number;\n progressUpdateIntervalMillis: number;\n rate: number;\n shouldCorrectPitch: boolean;\n shouldPlay: boolean;\n volume: number;\n};\n\nexport let SDK: string;\n\nexport type SoundOptions = {\n basePathOrCallback?: string;\n callback?: () => void;\n filenameOrFile?: string;\n initialStatus?: Partial<AVPlaybackStatusToSet>;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n source?: { uri: string };\n};\n\nexport type SoundReturnType = {\n paused: boolean;\n testID: string;\n getDuration?: () => number;\n isPlaying?: () => boolean;\n onBuffer?: (props: { isBuffering: boolean }) => void;\n onEnd?: () => void;\n onLoad?: (payload: VideoPayloadData) => void;\n onLoadStart?: () => void;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n onProgress?: (data: VideoProgressData) => void;\n onReadyForDisplay?: () => void;\n pauseAsync?: () => void;\n play?: () => void;\n playAsync?: () => void;\n replayAsync?: () => void;\n resizeMode?: string;\n seek?: (progress: number) => void;\n setPositionAsync?: (millis: number) => void;\n soundRef?: React.RefObject<SoundReturnType>;\n stopAsync?: () => void;\n style?: StyleProp<ViewStyle>;\n unloadAsync?: () => void;\n uri?: string;\n};\n\nexport type SoundType = {\n initializeSound: (\n source?: { uri: string },\n initialStatus?: Partial<AVPlaybackStatusToSet>,\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void,\n ) => Promise<SoundReturnType | null>;\n Player: React.ComponentType<SoundReturnType> | null;\n};\n\nexport let Sound: SoundType;\n\nexport type VideoProgressData = {\n currentTime: number;\n seekableDuration: number;\n playableDuration?: number;\n};\n\nexport type VideoPayloadData = {\n duration: number;\n audioTracks?: { index: number; language: string; title: string; type: string }[];\n currentPosition?: number;\n naturalSize?: { height: number; orientation: 'portrait' | 'landscape'; width: number };\n textTracks?: { index: number; language: string; title: string; type: string }[];\n videoTracks?: {\n bitrate: number;\n codecs: string;\n height: number;\n trackId: number;\n width: number;\n }[];\n};\n\nexport type VideoType = {\n paused: boolean;\n testID: string;\n uri: string;\n videoRef: React.RefObject<VideoType>;\n onBuffer?: (props: { isBuffering: boolean }) => void;\n onEnd?: () => void;\n onLoad?: (payload: VideoPayloadData) => void;\n onLoadStart?: () => void;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n onProgress?: (data: VideoProgressData) => void;\n onReadyForDisplay?: () => void;\n repeat?: boolean;\n replayAsync?: () => void;\n resizeMode?: string;\n seek?: (progress: number) => void;\n setPositionAsync?: (position: number) => void;\n style?: StyleProp<ViewStyle>;\n};\n\nexport let Video: React.ComponentType<VideoType>;\n\ntype Handlers = {\n compressImage?: CompressImage;\n deleteFile?: DeleteFile;\n FlatList?: typeof DefaultFlatList;\n getLocalAssetUri?: GetLocalAssetUri;\n getPhotos?: GetPhotos;\n NetInfo?: NetInfo;\n pickDocument?: PickDocument;\n saveFile?: SaveFile;\n SDK?: string;\n shareImage?: ShareImage;\n Sound?: SoundType;\n takePhoto?: TakePhoto;\n triggerHaptic?: TriggerHaptic;\n Video?: React.ComponentType<VideoType>;\n};\n\nexport const registerNativeHandlers = (handlers: Handlers) => {\n if (handlers.compressImage) {\n compressImage = handlers.compressImage;\n }\n\n if (handlers.deleteFile) {\n deleteFile = handlers.deleteFile;\n }\n\n if (handlers.FlatList) {\n FlatList = handlers.FlatList;\n }\n if (handlers.NetInfo) {\n NetInfo = handlers.NetInfo;\n }\n\n if (handlers.getLocalAssetUri) {\n getLocalAssetUri = handlers.getLocalAssetUri;\n }\n\n if (handlers.getPhotos) {\n getPhotos = handlers.getPhotos;\n }\n\n if (handlers.pickDocument) {\n pickDocument = handlers.pickDocument;\n }\n\n if (handlers.saveFile) {\n saveFile = handlers.saveFile;\n }\n\n if (handlers.SDK) {\n SDK = handlers.SDK;\n }\n\n if (handlers.shareImage !== undefined) {\n shareImage = handlers.shareImage;\n }\n\n if (handlers.Sound) {\n Sound = handlers.Sound;\n }\n\n if (handlers.takePhoto) {\n takePhoto = handlers.takePhoto;\n }\n\n if (handlers.triggerHaptic) {\n triggerHaptic = handlers.triggerHaptic;\n }\n\n if (handlers.Video) {\n Video = handlers.Video;\n }\n};\n\nexport const isVideoPackageAvailable = () => !!Video;\nexport const isAudioPackageAvailable = () => !!Sound.Player || !!Sound.initializeSound;\n"]}
1
+ {"version":3,"sources":["native.ts"],"names":["fail","Error","compressImage","deleteFile","getLocalAssetUri","getPhotos","FlatList","DefaultFlatList","NetInfo","addEventListener","fetch","pickDocument","saveFile","setClipboardString","shareImage","takePhoto","triggerHaptic","SDK","Sound","Video","registerNativeHandlers","handlers","undefined","isVideoPackageAvailable","isAudioPackageAvailable","Player","initializeSound"],"mappings":"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","sourcesContent":["import type React from 'react';\nimport { FlatList as DefaultFlatList, StyleProp, ViewStyle } from 'react-native';\n\nimport type { NetInfoSubscription } from '@react-native-community/netinfo';\n\nimport type { Asset, File } from './types/types';\n\nconst fail = () => {\n throw Error(\n 'Native handler was not registered, you should import stream-chat-expo or stream-chat-react-native',\n );\n};\n\ntype CompressImage = ({\n compressImageQuality,\n height,\n uri,\n width,\n}: {\n compressImageQuality: number;\n height: number;\n uri: string;\n width: number;\n}) => Promise<string> | never;\nexport let compressImage: CompressImage = fail;\n\ntype DeleteFile = ({ uri }: { uri: string }) => Promise<boolean> | never;\nexport let deleteFile: DeleteFile = fail;\n\ntype GetLocalAssetUri = (uriOrAssetId: string) => Promise<string> | never;\nexport let getLocalAssetUri: GetLocalAssetUri = fail;\n\ntype GetPhotos = ({ after, first }: { first: number; after?: string }) =>\n | Promise<{\n assets: Array<Omit<Asset, 'source'> & { source: 'picker' }>;\n endCursor: string;\n hasNextPage: boolean;\n }>\n | never;\nexport let getPhotos: GetPhotos = fail;\n\ntype NetInfo = {\n addEventListener: (listener: (isConnected: boolean) => void) => NetInfoSubscription | never;\n fetch: (requestedInterface?: string | undefined) => Promise<boolean> | never;\n};\n\nexport let FlatList = DefaultFlatList;\n\nexport let NetInfo: NetInfo = {\n addEventListener: fail,\n fetch: fail,\n};\n\ntype PickDocument = ({ maxNumberOfFiles }: { maxNumberOfFiles?: number }) =>\n | Promise<{\n cancelled: boolean;\n docs?: File[];\n }>\n | never;\nexport let pickDocument: PickDocument = fail;\n\ntype SaveFileOptions = {\n fileName: string;\n fromUrl: string;\n};\ntype SaveFile = (options: SaveFileOptions) => Promise<string> | never;\nexport let saveFile: SaveFile = fail;\n\ntype SetClipboardString = (text: string) => Promise<void> | never;\nexport let setClipboardString: SetClipboardString = fail;\n\ntype ShareOptions = {\n type?: string;\n url?: string;\n};\ntype ShareImage = (options: ShareOptions) => Promise<boolean> | never;\nexport let shareImage: ShareImage = fail;\n\ntype Photo =\n | (Omit<Asset, 'source'> & {\n cancelled: false;\n source: 'camera';\n })\n | { cancelled: true };\ntype TakePhoto = (options: { compressImageQuality?: number }) => Promise<Photo> | never;\nexport let takePhoto: TakePhoto = fail;\n\ntype HapticFeedbackMethod =\n | 'impactHeavy'\n | 'impactLight'\n | 'impactMedium'\n | 'notificationError'\n | 'notificationSuccess'\n | 'notificationWarning'\n | 'selection';\ntype TriggerHaptic = (method: HapticFeedbackMethod) => void | never;\nexport let triggerHaptic: TriggerHaptic = fail;\n\nexport type PlaybackStatus = {\n didJustFinish: boolean;\n durationMillis: number;\n error: string;\n isBuffering: boolean;\n isLoaded: boolean;\n isLooping: boolean;\n isPlaying: boolean;\n positionMillis: number;\n};\n\nexport type AVPlaybackStatusToSet = {\n isLooping: boolean;\n isMuted: boolean;\n positionMillis: number;\n progressUpdateIntervalMillis: number;\n rate: number;\n shouldCorrectPitch: boolean;\n shouldPlay: boolean;\n volume: number;\n};\n\nexport let SDK: string;\n\nexport type SoundOptions = {\n basePathOrCallback?: string;\n callback?: () => void;\n filenameOrFile?: string;\n initialStatus?: Partial<AVPlaybackStatusToSet>;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n source?: { uri: string };\n};\n\nexport type SoundReturnType = {\n paused: boolean;\n testID: string;\n getDuration?: () => number;\n isPlaying?: () => boolean;\n onBuffer?: (props: { isBuffering: boolean }) => void;\n onEnd?: () => void;\n onLoad?: (payload: VideoPayloadData) => void;\n onLoadStart?: () => void;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n onProgress?: (data: VideoProgressData) => void;\n onReadyForDisplay?: () => void;\n pauseAsync?: () => void;\n play?: () => void;\n playAsync?: () => void;\n replayAsync?: () => void;\n resizeMode?: string;\n seek?: (progress: number) => void;\n setPositionAsync?: (millis: number) => void;\n soundRef?: React.RefObject<SoundReturnType>;\n stopAsync?: () => void;\n style?: StyleProp<ViewStyle>;\n unloadAsync?: () => void;\n uri?: string;\n};\n\nexport type SoundType = {\n initializeSound: (\n source?: { uri: string },\n initialStatus?: Partial<AVPlaybackStatusToSet>,\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void,\n ) => Promise<SoundReturnType | null>;\n Player: React.ComponentType<SoundReturnType> | null;\n};\n\nexport let Sound: SoundType;\n\nexport type VideoProgressData = {\n currentTime: number;\n seekableDuration: number;\n playableDuration?: number;\n};\n\nexport type VideoPayloadData = {\n duration: number;\n audioTracks?: { index: number; language: string; title: string; type: string }[];\n currentPosition?: number;\n naturalSize?: { height: number; orientation: 'portrait' | 'landscape'; width: number };\n textTracks?: { index: number; language: string; title: string; type: string }[];\n videoTracks?: {\n bitrate: number;\n codecs: string;\n height: number;\n trackId: number;\n width: number;\n }[];\n};\n\nexport type VideoType = {\n paused: boolean;\n testID: string;\n uri: string;\n videoRef: React.RefObject<VideoType>;\n onBuffer?: (props: { isBuffering: boolean }) => void;\n onEnd?: () => void;\n onLoad?: (payload: VideoPayloadData) => void;\n onLoadStart?: () => void;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n onProgress?: (data: VideoProgressData) => void;\n onReadyForDisplay?: () => void;\n repeat?: boolean;\n replayAsync?: () => void;\n resizeMode?: string;\n seek?: (progress: number) => void;\n setPositionAsync?: (position: number) => void;\n style?: StyleProp<ViewStyle>;\n};\n\nexport let Video: React.ComponentType<VideoType>;\n\ntype Handlers = {\n compressImage?: CompressImage;\n deleteFile?: DeleteFile;\n FlatList?: typeof DefaultFlatList;\n getLocalAssetUri?: GetLocalAssetUri;\n getPhotos?: GetPhotos;\n NetInfo?: NetInfo;\n pickDocument?: PickDocument;\n saveFile?: SaveFile;\n SDK?: string;\n setClipboardString?: SetClipboardString;\n shareImage?: ShareImage;\n Sound?: SoundType;\n takePhoto?: TakePhoto;\n triggerHaptic?: TriggerHaptic;\n Video?: React.ComponentType<VideoType>;\n};\n\nexport const registerNativeHandlers = (handlers: Handlers) => {\n if (handlers.compressImage) {\n compressImage = handlers.compressImage;\n }\n\n if (handlers.deleteFile) {\n deleteFile = handlers.deleteFile;\n }\n\n if (handlers.FlatList) {\n FlatList = handlers.FlatList;\n }\n if (handlers.NetInfo) {\n NetInfo = handlers.NetInfo;\n }\n\n if (handlers.getLocalAssetUri) {\n getLocalAssetUri = handlers.getLocalAssetUri;\n }\n\n if (handlers.getPhotos) {\n getPhotos = handlers.getPhotos;\n }\n\n if (handlers.pickDocument) {\n pickDocument = handlers.pickDocument;\n }\n\n if (handlers.saveFile) {\n saveFile = handlers.saveFile;\n }\n\n if (handlers.SDK) {\n SDK = handlers.SDK;\n }\n\n if (handlers.shareImage !== undefined) {\n shareImage = handlers.shareImage;\n }\n\n if (handlers.Sound) {\n Sound = handlers.Sound;\n }\n\n if (handlers.takePhoto) {\n takePhoto = handlers.takePhoto;\n }\n\n if (handlers.triggerHaptic) {\n triggerHaptic = handlers.triggerHaptic;\n }\n\n if (handlers.Video) {\n Video = handlers.Video;\n }\n\n if (handlers.setClipboardString !== undefined) {\n setClipboardString = handlers.setClipboardString;\n }\n};\n\nexport const isVideoPackageAvailable = () => !!Video;\nexport const isAudioPackageAvailable = () => !!Sound.Player || !!Sound.initializeSound;\n"]}
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "5.4.4-beta.1"
2
+ "version": "5.5.0-beta.2"
3
3
  }
@@ -19,6 +19,8 @@ var _ThemeContext = require("../../../contexts/themeContext/ThemeContext");
19
19
 
20
20
  var _icons = require("../../../icons");
21
21
 
22
+ var _native = require("../../../native");
23
+
22
24
  var _utils = require("../../../utils/utils");
23
25
 
24
26
  var _removeReservedFields = require("../utils/removeReservedFields");
@@ -143,13 +145,13 @@ var useMessageActions = function useMessageActions(_ref) {
143
145
  __self: _this,
144
146
  __source: {
145
147
  fileName: _jsxFileName,
146
- lineNumber: 146,
148
+ lineNumber: 147,
147
149
  columnNumber: 11
148
150
  }
149
151
  }),
150
152
  title: (_message$user3 = message.user) != null && _message$user3.banned ? t('Unblock User') : t('Block User')
151
153
  };
152
- var copyMessage = {
154
+ var copyMessage = _native.setClipboardString !== null ? {
153
155
  action: function action() {
154
156
  setOverlay('none');
155
157
 
@@ -157,7 +159,7 @@ var useMessageActions = function useMessageActions(_ref) {
157
159
  handleCopy(message);
158
160
  }
159
161
 
160
- _reactNative.Clipboard.setString(message.text || '');
162
+ (0, _native.setClipboardString)(message.text || '');
161
163
  },
162
164
  actionType: 'copyMessage',
163
165
  icon: _react["default"].createElement(_icons.Copy, {
@@ -165,12 +167,12 @@ var useMessageActions = function useMessageActions(_ref) {
165
167
  __self: _this,
166
168
  __source: {
167
169
  fileName: _jsxFileName,
168
- lineNumber: 160,
169
- columnNumber: 11
170
+ lineNumber: 162,
171
+ columnNumber: 17
170
172
  }
171
173
  }),
172
174
  title: t('Copy Message')
173
- };
175
+ } : undefined;
174
176
  var deleteMessage = {
175
177
  action: function action() {
176
178
  setOverlay('alert');
@@ -224,7 +226,7 @@ var useMessageActions = function useMessageActions(_ref) {
224
226
  __self: _this,
225
227
  __source: {
226
228
  fileName: _jsxFileName,
227
- lineNumber: 191,
229
+ lineNumber: 194,
228
230
  columnNumber: 11
229
231
  }
230
232
  }),
@@ -249,7 +251,7 @@ var useMessageActions = function useMessageActions(_ref) {
249
251
  __self: _this,
250
252
  __source: {
251
253
  fileName: _jsxFileName,
252
- lineNumber: 205,
254
+ lineNumber: 208,
253
255
  columnNumber: 11
254
256
  }
255
257
  }),
@@ -273,7 +275,7 @@ var useMessageActions = function useMessageActions(_ref) {
273
275
  __self: _this,
274
276
  __source: {
275
277
  fileName: _jsxFileName,
276
- lineNumber: 218,
278
+ lineNumber: 221,
277
279
  columnNumber: 11
278
280
  }
279
281
  }),
@@ -295,7 +297,7 @@ var useMessageActions = function useMessageActions(_ref) {
295
297
  __self: _this,
296
298
  __source: {
297
299
  fileName: _jsxFileName,
298
- lineNumber: 231,
300
+ lineNumber: 234,
299
301
  columnNumber: 11
300
302
  }
301
303
  }),
@@ -375,7 +377,7 @@ var useMessageActions = function useMessageActions(_ref) {
375
377
  __self: _this,
376
378
  __source: {
377
379
  fileName: _jsxFileName,
378
- lineNumber: 284,
380
+ lineNumber: 287,
379
381
  columnNumber: 11
380
382
  }
381
383
  }),
@@ -449,7 +451,7 @@ var useMessageActions = function useMessageActions(_ref) {
449
451
  __self: _this,
450
452
  __source: {
451
453
  fileName: _jsxFileName,
452
- lineNumber: 312,
454
+ lineNumber: 315,
453
455
  columnNumber: 11
454
456
  }
455
457
  }),
@@ -471,7 +473,7 @@ var useMessageActions = function useMessageActions(_ref) {
471
473
  __self: _this,
472
474
  __source: {
473
475
  fileName: _jsxFileName,
474
- lineNumber: 325,
476
+ lineNumber: 328,
475
477
  columnNumber: 11
476
478
  }
477
479
  }),
@@ -515,7 +517,7 @@ var useMessageActions = function useMessageActions(_ref) {
515
517
  __self: _this,
516
518
  __source: {
517
519
  fileName: _jsxFileName,
518
- lineNumber: 340,
520
+ lineNumber: 343,
519
521
  columnNumber: 11
520
522
  }
521
523
  }),
@@ -537,7 +539,7 @@ var useMessageActions = function useMessageActions(_ref) {
537
539
  __self: _this,
538
540
  __source: {
539
541
  fileName: _jsxFileName,
540
- lineNumber: 353,
542
+ lineNumber: 356,
541
543
  columnNumber: 11
542
544
  }
543
545
  }),
@@ -1 +1 @@
1
- {"version":3,"sources":["useMessageActions.tsx"],"names":["useMessageActions","channel","client","enforceUniqueReaction","handleBlock","handleCopy","handleDelete","handleEdit","handleFlag","handleMute","handlePinMessage","handleQuotedReply","handleReactionProp","handleReaction","handleRetry","handleThreadReply","message","onThreadSelect","openThread","removeMessage","retrySendMessage","selectReaction","setEditingState","setOverlay","setQuotedMessageState","supportedReactions","t","updateMessage","theme","colors","accent_blue","accent_red","grey","handleDeleteMessage","handleEditMessage","handleQuotedReplyMessage","handleResendMessage","handleToggleBanUser","handleToggleMuteUser","handleTogglePinMessage","handleToggleReaction","error","type","status","MessageStatusTypes","FAILED","onOpenThread","isMuted","mutedUsers","some","mute","user","id","userID","target","blockUser","action","actionType","icon","title","banned","copyMessage","Clipboard","setString","text","deleteMessage","Alert","alert","onPress","style","cancelable","titleStyle","color","editMessage","pinMessage","unpinMessage","flagMessage","reactionType","undefined","muteUser","quotedReply","retry","messageWithoutReservedFields","threadReply"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Alert, Clipboard } from 'react-native';\n\nimport { useMessageActionHandlers } from './useMessageActionHandlers';\n\nimport type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';\nimport type { ChatContextValue } from '../../../contexts/chatContext/ChatContext';\nimport type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';\nimport type { MessagesContextValue } from '../../../contexts/messagesContext/MessagesContext';\nimport type { OverlayContextValue } from '../../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport type { ThreadContextValue } from '../../../contexts/threadContext/ThreadContext';\nimport type { TranslationContextValue } from '../../../contexts/translationContext/TranslationContext';\nimport {\n Copy,\n CurveLineLeftUp,\n Delete,\n Edit,\n MessageFlag,\n Mute,\n Pin,\n SendUp,\n ThreadReply,\n Unpin,\n UserDelete,\n} from '../../../icons';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { MessageStatusTypes } from '../../../utils/utils';\n\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\nimport type { MessageActionType } from '../../MessageOverlay/MessageActionListItem';\nimport { removeReservedFields } from '../utils/removeReservedFields';\n\nexport const useMessageActions = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n channel,\n client,\n enforceUniqueReaction,\n handleBlock,\n handleCopy,\n handleDelete,\n handleEdit,\n handleFlag,\n handleMute,\n handlePinMessage,\n handleQuotedReply,\n handleReaction: handleReactionProp,\n handleRetry,\n handleThreadReply,\n message,\n onThreadSelect,\n openThread,\n removeMessage,\n retrySendMessage,\n selectReaction,\n setEditingState,\n setOverlay,\n setQuotedMessageState,\n supportedReactions,\n t,\n updateMessage,\n}: Pick<\n MessagesContextValue<StreamChatGenerics>,\n | 'handleBlock'\n | 'handleCopy'\n | 'handleDelete'\n | 'handleEdit'\n | 'handleFlag'\n | 'handleQuotedReply'\n | 'handleMute'\n | 'handlePinMessage'\n | 'handleRetry'\n | 'handleReaction'\n | 'handleThreadReply'\n | 'removeMessage'\n | 'retrySendMessage'\n | 'setEditingState'\n | 'setQuotedMessageState'\n | 'selectReaction'\n | 'supportedReactions'\n | 'updateMessage'\n> &\n Pick<ChannelContextValue<StreamChatGenerics>, 'channel' | 'enforceUniqueReaction'> &\n Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Pick<OverlayContextValue, 'setOverlay'> &\n Pick<ThreadContextValue<StreamChatGenerics>, 'openThread'> &\n Pick<MessageContextValue<StreamChatGenerics>, 'message'> &\n Pick<TranslationContextValue, 't'> & {\n onThreadSelect?: (message: MessageType<StreamChatGenerics>) => void;\n }) => {\n const {\n theme: {\n colors: { accent_blue, accent_red, grey },\n },\n } = useTheme();\n const {\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleTogglePinMessage,\n handleToggleReaction,\n } = useMessageActionHandlers({\n channel,\n client,\n enforceUniqueReaction,\n message,\n removeMessage,\n retrySendMessage,\n setEditingState,\n setQuotedMessageState,\n supportedReactions,\n updateMessage,\n });\n\n const error = message.type === 'error' || message.status === MessageStatusTypes.FAILED;\n\n const onOpenThread = () => {\n if (onThreadSelect) {\n onThreadSelect(message);\n }\n if (openThread) {\n openThread(message);\n }\n };\n\n const isMuted = (client.mutedUsers || []).some(\n (mute) => mute.user.id === client.userID && mute.target.id === message.user?.id,\n );\n\n const blockUser: MessageActionType = {\n action: async () => {\n setOverlay('none');\n if (message.user?.id) {\n if (handleBlock) {\n handleBlock(message);\n }\n\n await handleToggleBanUser();\n }\n },\n actionType: 'blockUser',\n icon: <UserDelete pathFill={grey} />,\n title: message.user?.banned ? t('Unblock User') : t('Block User'),\n };\n\n const copyMessage: MessageActionType = {\n // using depreciated Clipboard from react-native until expo supports the community version or their own\n action: () => {\n setOverlay('none');\n if (handleCopy) {\n handleCopy(message);\n }\n Clipboard.setString(message.text || '');\n },\n actionType: 'copyMessage',\n icon: <Copy pathFill={grey} />,\n title: t('Copy Message'),\n };\n\n const deleteMessage: MessageActionType = {\n action: () => {\n setOverlay('alert');\n if (message.id) {\n Alert.alert(\n t('Delete Message'),\n t('Are you sure you want to permanently delete this message?'),\n [\n { onPress: () => setOverlay('none'), text: t('Cancel') },\n {\n onPress: async () => {\n setOverlay('none');\n if (handleDelete) {\n handleDelete(message);\n }\n\n await handleDeleteMessage();\n },\n style: 'destructive',\n text: t('Delete'),\n },\n ],\n { cancelable: false },\n );\n }\n },\n actionType: 'deleteMessage',\n icon: <Delete pathFill={accent_red} />,\n title: t('Delete Message'),\n titleStyle: { color: accent_red },\n };\n\n const editMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleEdit) {\n handleEdit(message);\n }\n handleEditMessage();\n },\n actionType: 'editMessage',\n icon: <Edit pathFill={grey} />,\n title: t('Edit Message'),\n };\n\n const pinMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handlePinMessage) {\n handlePinMessage(message);\n }\n handleTogglePinMessage();\n },\n actionType: 'pinMessage',\n icon: <Pin height={23} pathFill={grey} width={24} />,\n title: t('Pin to Conversation'),\n };\n\n const unpinMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handlePinMessage) {\n handlePinMessage(message);\n }\n handleTogglePinMessage();\n },\n actionType: 'unpinMessage',\n icon: <Unpin pathFill={grey} />,\n title: t('Unpin from Conversation'),\n };\n\n const flagMessage: MessageActionType = {\n action: () => {\n setOverlay('alert');\n if (message.id) {\n Alert.alert(\n t('Flag Message'),\n t('Do you want to send a copy of this message to a moderator for further investigation?'),\n [\n { onPress: () => setOverlay('none'), text: t('Cancel') },\n {\n onPress: async () => {\n try {\n if (handleFlag) {\n handleFlag(message);\n }\n await client.flagMessage(message.id);\n Alert.alert(\n t('Message flagged'),\n t('The message has been reported to a moderator.'),\n [\n {\n onPress: () => setOverlay('none'),\n text: t('Ok'),\n },\n ],\n );\n } catch (_) {\n Alert.alert(\n t('Cannot Flag Message'),\n t(\n 'Flag action failed either due to a network issue or the message is already flagged',\n ),\n [\n {\n onPress: () => setOverlay('none'),\n text: t('Ok'),\n },\n ],\n );\n }\n },\n text: t('Flag'),\n },\n ],\n { cancelable: false },\n );\n }\n },\n actionType: 'flagMessage',\n icon: <MessageFlag pathFill={grey} />,\n title: t('Flag Message'),\n };\n\n const handleReaction = !error\n ? selectReaction\n ? selectReaction(message)\n : async (reactionType: string) => {\n if (handleReactionProp) {\n handleReactionProp(message, reactionType);\n }\n\n await handleToggleReaction(reactionType);\n }\n : undefined;\n\n const muteUser: MessageActionType = {\n action: async () => {\n setOverlay('none');\n if (message.user?.id) {\n if (handleMute) {\n handleMute(message);\n }\n\n await handleToggleMuteUser();\n }\n },\n actionType: 'muteUser',\n icon: <Mute pathFill={grey} />,\n title: isMuted ? t('Unmute User') : t('Mute User'),\n };\n\n const quotedReply: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleQuotedReply) {\n handleQuotedReply(message);\n }\n handleQuotedReplyMessage();\n },\n actionType: 'quotedReply',\n icon: <CurveLineLeftUp pathFill={grey} />,\n title: t('Reply'),\n };\n\n const retry: MessageActionType = {\n action: async () => {\n setOverlay('none');\n const messageWithoutReservedFields = removeReservedFields(message);\n if (handleRetry) {\n handleRetry(messageWithoutReservedFields);\n }\n\n await handleResendMessage();\n },\n actionType: 'retry',\n icon: <SendUp pathFill={accent_blue} />,\n title: t('Resend'),\n };\n\n const threadReply: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleThreadReply) {\n handleThreadReply(message);\n }\n onOpenThread();\n },\n actionType: 'threadReply',\n icon: <ThreadReply pathFill={grey} />,\n title: t('Thread Reply'),\n };\n\n return {\n blockUser,\n copyMessage,\n deleteMessage,\n editMessage,\n flagMessage,\n handleReaction,\n muteUser,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n };\n};\n"]}
1
+ {"version":3,"sources":["useMessageActions.tsx"],"names":["useMessageActions","channel","client","enforceUniqueReaction","handleBlock","handleCopy","handleDelete","handleEdit","handleFlag","handleMute","handlePinMessage","handleQuotedReply","handleReactionProp","handleReaction","handleRetry","handleThreadReply","message","onThreadSelect","openThread","removeMessage","retrySendMessage","selectReaction","setEditingState","setOverlay","setQuotedMessageState","supportedReactions","t","updateMessage","theme","colors","accent_blue","accent_red","grey","handleDeleteMessage","handleEditMessage","handleQuotedReplyMessage","handleResendMessage","handleToggleBanUser","handleToggleMuteUser","handleTogglePinMessage","handleToggleReaction","error","type","status","MessageStatusTypes","FAILED","onOpenThread","isMuted","mutedUsers","some","mute","user","id","userID","target","blockUser","action","actionType","icon","title","banned","copyMessage","setClipboardString","text","undefined","deleteMessage","Alert","alert","onPress","style","cancelable","titleStyle","color","editMessage","pinMessage","unpinMessage","flagMessage","reactionType","muteUser","quotedReply","retry","messageWithoutReservedFields","threadReply"],"mappings":"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","sourcesContent":["import React from 'react';\nimport { Alert } from 'react-native';\n\nimport { useMessageActionHandlers } from './useMessageActionHandlers';\n\nimport type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';\nimport type { ChatContextValue } from '../../../contexts/chatContext/ChatContext';\nimport type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';\nimport type { MessagesContextValue } from '../../../contexts/messagesContext/MessagesContext';\nimport type { OverlayContextValue } from '../../../contexts/overlayContext/OverlayContext';\nimport { useTheme } from '../../../contexts/themeContext/ThemeContext';\nimport type { ThreadContextValue } from '../../../contexts/threadContext/ThreadContext';\nimport type { TranslationContextValue } from '../../../contexts/translationContext/TranslationContext';\nimport {\n Copy,\n CurveLineLeftUp,\n Delete,\n Edit,\n MessageFlag,\n Mute,\n Pin,\n SendUp,\n ThreadReply,\n Unpin,\n UserDelete,\n} from '../../../icons';\nimport { setClipboardString } from '../../../native';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport { MessageStatusTypes } from '../../../utils/utils';\n\nimport type { MessageType } from '../../MessageList/hooks/useMessageList';\nimport type { MessageActionType } from '../../MessageOverlay/MessageActionListItem';\nimport { removeReservedFields } from '../utils/removeReservedFields';\n\nexport const useMessageActions = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n channel,\n client,\n enforceUniqueReaction,\n handleBlock,\n handleCopy,\n handleDelete,\n handleEdit,\n handleFlag,\n handleMute,\n handlePinMessage,\n handleQuotedReply,\n handleReaction: handleReactionProp,\n handleRetry,\n handleThreadReply,\n message,\n onThreadSelect,\n openThread,\n removeMessage,\n retrySendMessage,\n selectReaction,\n setEditingState,\n setOverlay,\n setQuotedMessageState,\n supportedReactions,\n t,\n updateMessage,\n}: Pick<\n MessagesContextValue<StreamChatGenerics>,\n | 'handleBlock'\n | 'handleCopy'\n | 'handleDelete'\n | 'handleEdit'\n | 'handleFlag'\n | 'handleQuotedReply'\n | 'handleMute'\n | 'handlePinMessage'\n | 'handleRetry'\n | 'handleReaction'\n | 'handleThreadReply'\n | 'removeMessage'\n | 'retrySendMessage'\n | 'setEditingState'\n | 'setQuotedMessageState'\n | 'selectReaction'\n | 'supportedReactions'\n | 'updateMessage'\n> &\n Pick<ChannelContextValue<StreamChatGenerics>, 'channel' | 'enforceUniqueReaction'> &\n Pick<ChatContextValue<StreamChatGenerics>, 'client'> &\n Pick<OverlayContextValue, 'setOverlay'> &\n Pick<ThreadContextValue<StreamChatGenerics>, 'openThread'> &\n Pick<MessageContextValue<StreamChatGenerics>, 'message'> &\n Pick<TranslationContextValue, 't'> & {\n onThreadSelect?: (message: MessageType<StreamChatGenerics>) => void;\n }) => {\n const {\n theme: {\n colors: { accent_blue, accent_red, grey },\n },\n } = useTheme();\n const {\n handleDeleteMessage,\n handleEditMessage,\n handleQuotedReplyMessage,\n handleResendMessage,\n handleToggleBanUser,\n handleToggleMuteUser,\n handleTogglePinMessage,\n handleToggleReaction,\n } = useMessageActionHandlers({\n channel,\n client,\n enforceUniqueReaction,\n message,\n removeMessage,\n retrySendMessage,\n setEditingState,\n setQuotedMessageState,\n supportedReactions,\n updateMessage,\n });\n\n const error = message.type === 'error' || message.status === MessageStatusTypes.FAILED;\n\n const onOpenThread = () => {\n if (onThreadSelect) {\n onThreadSelect(message);\n }\n if (openThread) {\n openThread(message);\n }\n };\n\n const isMuted = (client.mutedUsers || []).some(\n (mute) => mute.user.id === client.userID && mute.target.id === message.user?.id,\n );\n\n const blockUser: MessageActionType = {\n action: async () => {\n setOverlay('none');\n if (message.user?.id) {\n if (handleBlock) {\n handleBlock(message);\n }\n\n await handleToggleBanUser();\n }\n },\n actionType: 'blockUser',\n icon: <UserDelete pathFill={grey} />,\n title: message.user?.banned ? t('Unblock User') : t('Block User'),\n };\n\n const copyMessage: MessageActionType | undefined =\n setClipboardString !== null\n ? {\n action: () => {\n setOverlay('none');\n if (handleCopy) {\n handleCopy(message);\n }\n setClipboardString(message.text || '');\n },\n actionType: 'copyMessage',\n icon: <Copy pathFill={grey} />,\n title: t('Copy Message'),\n }\n : undefined;\n\n const deleteMessage: MessageActionType = {\n action: () => {\n setOverlay('alert');\n if (message.id) {\n Alert.alert(\n t('Delete Message'),\n t('Are you sure you want to permanently delete this message?'),\n [\n { onPress: () => setOverlay('none'), text: t('Cancel') },\n {\n onPress: async () => {\n setOverlay('none');\n if (handleDelete) {\n handleDelete(message);\n }\n\n await handleDeleteMessage();\n },\n style: 'destructive',\n text: t('Delete'),\n },\n ],\n { cancelable: false },\n );\n }\n },\n actionType: 'deleteMessage',\n icon: <Delete pathFill={accent_red} />,\n title: t('Delete Message'),\n titleStyle: { color: accent_red },\n };\n\n const editMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleEdit) {\n handleEdit(message);\n }\n handleEditMessage();\n },\n actionType: 'editMessage',\n icon: <Edit pathFill={grey} />,\n title: t('Edit Message'),\n };\n\n const pinMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handlePinMessage) {\n handlePinMessage(message);\n }\n handleTogglePinMessage();\n },\n actionType: 'pinMessage',\n icon: <Pin height={23} pathFill={grey} width={24} />,\n title: t('Pin to Conversation'),\n };\n\n const unpinMessage: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handlePinMessage) {\n handlePinMessage(message);\n }\n handleTogglePinMessage();\n },\n actionType: 'unpinMessage',\n icon: <Unpin pathFill={grey} />,\n title: t('Unpin from Conversation'),\n };\n\n const flagMessage: MessageActionType = {\n action: () => {\n setOverlay('alert');\n if (message.id) {\n Alert.alert(\n t('Flag Message'),\n t('Do you want to send a copy of this message to a moderator for further investigation?'),\n [\n { onPress: () => setOverlay('none'), text: t('Cancel') },\n {\n onPress: async () => {\n try {\n if (handleFlag) {\n handleFlag(message);\n }\n await client.flagMessage(message.id);\n Alert.alert(\n t('Message flagged'),\n t('The message has been reported to a moderator.'),\n [\n {\n onPress: () => setOverlay('none'),\n text: t('Ok'),\n },\n ],\n );\n } catch (_) {\n Alert.alert(\n t('Cannot Flag Message'),\n t(\n 'Flag action failed either due to a network issue or the message is already flagged',\n ),\n [\n {\n onPress: () => setOverlay('none'),\n text: t('Ok'),\n },\n ],\n );\n }\n },\n text: t('Flag'),\n },\n ],\n { cancelable: false },\n );\n }\n },\n actionType: 'flagMessage',\n icon: <MessageFlag pathFill={grey} />,\n title: t('Flag Message'),\n };\n\n const handleReaction = !error\n ? selectReaction\n ? selectReaction(message)\n : async (reactionType: string) => {\n if (handleReactionProp) {\n handleReactionProp(message, reactionType);\n }\n\n await handleToggleReaction(reactionType);\n }\n : undefined;\n\n const muteUser: MessageActionType = {\n action: async () => {\n setOverlay('none');\n if (message.user?.id) {\n if (handleMute) {\n handleMute(message);\n }\n\n await handleToggleMuteUser();\n }\n },\n actionType: 'muteUser',\n icon: <Mute pathFill={grey} />,\n title: isMuted ? t('Unmute User') : t('Mute User'),\n };\n\n const quotedReply: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleQuotedReply) {\n handleQuotedReply(message);\n }\n handleQuotedReplyMessage();\n },\n actionType: 'quotedReply',\n icon: <CurveLineLeftUp pathFill={grey} />,\n title: t('Reply'),\n };\n\n const retry: MessageActionType = {\n action: async () => {\n setOverlay('none');\n const messageWithoutReservedFields = removeReservedFields(message);\n if (handleRetry) {\n handleRetry(messageWithoutReservedFields);\n }\n\n await handleResendMessage();\n },\n actionType: 'retry',\n icon: <SendUp pathFill={accent_blue} />,\n title: t('Resend'),\n };\n\n const threadReply: MessageActionType = {\n action: () => {\n setOverlay('none');\n if (handleThreadReply) {\n handleThreadReply(message);\n }\n onOpenThread();\n },\n actionType: 'threadReply',\n icon: <ThreadReply pathFill={grey} />,\n title: t('Thread Reply'),\n };\n\n return {\n blockUser,\n copyMessage,\n deleteMessage,\n editMessage,\n flagMessage,\n handleReaction,\n muteUser,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n };\n};\n"]}
@@ -43,7 +43,7 @@ var messageActions = function messageActions(_ref) {
43
43
  actions.push(editMessage);
44
44
  }
45
45
 
46
- if (message.text && !error) {
46
+ if (copyMessage !== undefined && message.text && !error) {
47
47
  actions.push(copyMessage);
48
48
  }
49
49
 
@@ -1 +1 @@
1
- {"version":3,"sources":["messageActions.ts"],"names":["messageActions","blockUser","copyMessage","deleteMessage","editMessage","error","flagMessage","isMyMessage","isThreadMessage","message","messageReactions","ownCapabilities","pinMessage","quotedReply","retry","threadReply","unpinMessage","undefined","actions","push","quoteMessage","sendReply","updateOwnMessage","updateAnyMessage","text","pinned","banChannelMembers","deleteOwnMessage","deleteAnyMessage"],"mappings":";;;;;AA8BO,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,OAmBkB;AAAA,MAhB9CC,SAgB8C,QAhB9CA,SAgB8C;AAAA,MAf9CC,WAe8C,QAf9CA,WAe8C;AAAA,MAd9CC,aAc8C,QAd9CA,aAc8C;AAAA,MAb9CC,WAa8C,QAb9CA,WAa8C;AAAA,MAZ9CC,KAY8C,QAZ9CA,KAY8C;AAAA,MAX9CC,WAW8C,QAX9CA,WAW8C;AAAA,MAV9CC,WAU8C,QAV9CA,WAU8C;AAAA,MAT9CC,eAS8C,QAT9CA,eAS8C;AAAA,MAR9CC,OAQ8C,QAR9CA,OAQ8C;AAAA,MAP9CC,gBAO8C,QAP9CA,gBAO8C;AAAA,MAN9CC,eAM8C,QAN9CA,eAM8C;AAAA,MAL9CC,UAK8C,QAL9CA,UAK8C;AAAA,MAJ9CC,WAI8C,QAJ9CA,WAI8C;AAAA,MAH9CC,KAG8C,QAH9CA,KAG8C;AAAA,MAF9CC,WAE8C,QAF9CA,WAE8C;AAAA,MAD9CC,YAC8C,QAD9CA,YAC8C;;AAC9C,MAAIN,gBAAJ,EAAsB;AACpB,WAAOO,SAAP;AACD;;AAED,MAAMC,OAAwC,GAAG,EAAjD;;AAEA,MAAIb,KAAK,IAAIE,WAAb,EAA0B;AACxBW,IAAAA,OAAO,CAACC,IAAR,CAAaL,KAAb;AACD;;AAED,MAAIH,eAAe,CAACS,YAAhB,IAAgC,CAACZ,eAAjC,IAAoD,CAACH,KAAzD,EAAgE;AAC9Da,IAAAA,OAAO,CAACC,IAAR,CAAaN,WAAb;AACD;;AAED,MAAIF,eAAe,CAACU,SAAhB,IAA6B,CAACb,eAA9B,IAAiD,CAACH,KAAtD,EAA6D;AAC3Da,IAAAA,OAAO,CAACC,IAAR,CAAaJ,WAAb;AACD;;AAED,MACGR,WAAW,IAAII,eAAe,CAACW,gBAAhC,IACC,CAACf,WAAD,IAAgBI,eAAe,CAACY,gBAFnC,EAGE;AACAL,IAAAA,OAAO,CAACC,IAAR,CAAaf,WAAb;AACD;;AAED,MAAIK,OAAO,CAACe,IAAR,IAAgB,CAACnB,KAArB,EAA4B;AAC1Ba,IAAAA,OAAO,CAACC,IAAR,CAAajB,WAAb;AACD;;AAED,MAAI,CAACK,WAAD,IAAgBI,eAAe,CAACL,WAApC,EAAiD;AAC/CY,IAAAA,OAAO,CAACC,IAAR,CAAab,WAAb;AACD;;AAED,MAAIK,eAAe,CAACC,UAAhB,IAA8B,CAACH,OAAO,CAACgB,MAA3C,EAAmD;AACjDP,IAAAA,OAAO,CAACC,IAAR,CAAaP,UAAb;AACD;;AAED,MAAID,eAAe,CAACC,UAAhB,IAA8BH,OAAO,CAACgB,MAA1C,EAAkD;AAChDP,IAAAA,OAAO,CAACC,IAAR,CAAaH,YAAb;AACD;;AAED,MAAI,CAACT,WAAD,IAAgBI,eAAe,CAACe,iBAApC,EAAuD;AACrDR,IAAAA,OAAO,CAACC,IAAR,CAAalB,SAAb;AACD;;AAED,MACGM,WAAW,IAAII,eAAe,CAACgB,gBAAhC,IACC,CAACpB,WAAD,IAAgBI,eAAe,CAACiB,gBAFnC,EAGE;AACAV,IAAAA,OAAO,CAACC,IAAR,CAAahB,aAAb;AACD;;AAED,SAAOe,OAAP;AACD,CAzEM","sourcesContent":["import type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';\nimport type { OwnCapabilitiesContextValue } from '../../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageActionType } from '../../MessageOverlay/MessageActionListItem';\n\nexport type MessageActionsParams<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n blockUser: MessageActionType;\n copyMessage: MessageActionType;\n deleteMessage: MessageActionType;\n dismissOverlay: () => void;\n editMessage: MessageActionType;\n error: boolean | Error;\n flagMessage: MessageActionType;\n isThreadMessage: boolean;\n messageReactions: boolean;\n muteUser: MessageActionType;\n ownCapabilities: OwnCapabilitiesContextValue;\n pinMessage: MessageActionType;\n quotedReply: MessageActionType;\n retry: MessageActionType;\n threadReply: MessageActionType;\n unpinMessage: MessageActionType;\n} & Pick<MessageContextValue<StreamChatGenerics>, 'message' | 'isMyMessage'>;\n\nexport type MessageActionsProp<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (param: MessageActionsParams<StreamChatGenerics>) => MessageActionType[];\n\nexport const messageActions = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n blockUser,\n copyMessage,\n deleteMessage,\n editMessage,\n error,\n flagMessage,\n isMyMessage,\n isThreadMessage,\n message,\n messageReactions,\n ownCapabilities,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n}: MessageActionsParams<StreamChatGenerics>) => {\n if (messageReactions) {\n return undefined;\n }\n\n const actions: Array<MessageActionType | null> = [];\n\n if (error && isMyMessage) {\n actions.push(retry);\n }\n\n if (ownCapabilities.quoteMessage && !isThreadMessage && !error) {\n actions.push(quotedReply);\n }\n\n if (ownCapabilities.sendReply && !isThreadMessage && !error) {\n actions.push(threadReply);\n }\n\n if (\n (isMyMessage && ownCapabilities.updateOwnMessage) ||\n (!isMyMessage && ownCapabilities.updateAnyMessage)\n ) {\n actions.push(editMessage);\n }\n\n if (message.text && !error) {\n actions.push(copyMessage);\n }\n\n if (!isMyMessage && ownCapabilities.flagMessage) {\n actions.push(flagMessage);\n }\n\n if (ownCapabilities.pinMessage && !message.pinned) {\n actions.push(pinMessage);\n }\n\n if (ownCapabilities.pinMessage && message.pinned) {\n actions.push(unpinMessage);\n }\n\n if (!isMyMessage && ownCapabilities.banChannelMembers) {\n actions.push(blockUser);\n }\n\n if (\n (isMyMessage && ownCapabilities.deleteOwnMessage) ||\n (!isMyMessage && ownCapabilities.deleteAnyMessage)\n ) {\n actions.push(deleteMessage);\n }\n\n return actions;\n};\n"]}
1
+ {"version":3,"sources":["messageActions.ts"],"names":["messageActions","blockUser","copyMessage","deleteMessage","editMessage","error","flagMessage","isMyMessage","isThreadMessage","message","messageReactions","ownCapabilities","pinMessage","quotedReply","retry","threadReply","unpinMessage","undefined","actions","push","quoteMessage","sendReply","updateOwnMessage","updateAnyMessage","text","pinned","banChannelMembers","deleteOwnMessage","deleteAnyMessage"],"mappings":";;;;;AA8BO,IAAMA,cAAc,GAAG,SAAjBA,cAAiB,OAmBkB;AAAA,MAhB9CC,SAgB8C,QAhB9CA,SAgB8C;AAAA,MAf9CC,WAe8C,QAf9CA,WAe8C;AAAA,MAd9CC,aAc8C,QAd9CA,aAc8C;AAAA,MAb9CC,WAa8C,QAb9CA,WAa8C;AAAA,MAZ9CC,KAY8C,QAZ9CA,KAY8C;AAAA,MAX9CC,WAW8C,QAX9CA,WAW8C;AAAA,MAV9CC,WAU8C,QAV9CA,WAU8C;AAAA,MAT9CC,eAS8C,QAT9CA,eAS8C;AAAA,MAR9CC,OAQ8C,QAR9CA,OAQ8C;AAAA,MAP9CC,gBAO8C,QAP9CA,gBAO8C;AAAA,MAN9CC,eAM8C,QAN9CA,eAM8C;AAAA,MAL9CC,UAK8C,QAL9CA,UAK8C;AAAA,MAJ9CC,WAI8C,QAJ9CA,WAI8C;AAAA,MAH9CC,KAG8C,QAH9CA,KAG8C;AAAA,MAF9CC,WAE8C,QAF9CA,WAE8C;AAAA,MAD9CC,YAC8C,QAD9CA,YAC8C;;AAC9C,MAAIN,gBAAJ,EAAsB;AACpB,WAAOO,SAAP;AACD;;AAED,MAAMC,OAAwC,GAAG,EAAjD;;AAEA,MAAIb,KAAK,IAAIE,WAAb,EAA0B;AACxBW,IAAAA,OAAO,CAACC,IAAR,CAAaL,KAAb;AACD;;AAED,MAAIH,eAAe,CAACS,YAAhB,IAAgC,CAACZ,eAAjC,IAAoD,CAACH,KAAzD,EAAgE;AAC9Da,IAAAA,OAAO,CAACC,IAAR,CAAaN,WAAb;AACD;;AAED,MAAIF,eAAe,CAACU,SAAhB,IAA6B,CAACb,eAA9B,IAAiD,CAACH,KAAtD,EAA6D;AAC3Da,IAAAA,OAAO,CAACC,IAAR,CAAaJ,WAAb;AACD;;AAED,MACGR,WAAW,IAAII,eAAe,CAACW,gBAAhC,IACC,CAACf,WAAD,IAAgBI,eAAe,CAACY,gBAFnC,EAGE;AACAL,IAAAA,OAAO,CAACC,IAAR,CAAaf,WAAb;AACD;;AAED,MAAIF,WAAW,KAAKe,SAAhB,IAA6BR,OAAO,CAACe,IAArC,IAA6C,CAACnB,KAAlD,EAAyD;AACvDa,IAAAA,OAAO,CAACC,IAAR,CAAajB,WAAb;AACD;;AAED,MAAI,CAACK,WAAD,IAAgBI,eAAe,CAACL,WAApC,EAAiD;AAC/CY,IAAAA,OAAO,CAACC,IAAR,CAAab,WAAb;AACD;;AAED,MAAIK,eAAe,CAACC,UAAhB,IAA8B,CAACH,OAAO,CAACgB,MAA3C,EAAmD;AACjDP,IAAAA,OAAO,CAACC,IAAR,CAAaP,UAAb;AACD;;AAED,MAAID,eAAe,CAACC,UAAhB,IAA8BH,OAAO,CAACgB,MAA1C,EAAkD;AAChDP,IAAAA,OAAO,CAACC,IAAR,CAAaH,YAAb;AACD;;AAED,MAAI,CAACT,WAAD,IAAgBI,eAAe,CAACe,iBAApC,EAAuD;AACrDR,IAAAA,OAAO,CAACC,IAAR,CAAalB,SAAb;AACD;;AAED,MACGM,WAAW,IAAII,eAAe,CAACgB,gBAAhC,IACC,CAACpB,WAAD,IAAgBI,eAAe,CAACiB,gBAFnC,EAGE;AACAV,IAAAA,OAAO,CAACC,IAAR,CAAahB,aAAb;AACD;;AAED,SAAOe,OAAP;AACD,CAzEM","sourcesContent":["import type { MessageContextValue } from '../../../contexts/messageContext/MessageContext';\nimport type { OwnCapabilitiesContextValue } from '../../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\nimport type { MessageActionType } from '../../MessageOverlay/MessageActionListItem';\n\nexport type MessageActionsParams<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n blockUser: MessageActionType;\n deleteMessage: MessageActionType;\n dismissOverlay: () => void;\n editMessage: MessageActionType;\n error: boolean | Error;\n flagMessage: MessageActionType;\n isThreadMessage: boolean;\n messageReactions: boolean;\n muteUser: MessageActionType;\n ownCapabilities: OwnCapabilitiesContextValue;\n pinMessage: MessageActionType;\n quotedReply: MessageActionType;\n retry: MessageActionType;\n threadReply: MessageActionType;\n unpinMessage: MessageActionType;\n copyMessage?: MessageActionType;\n} & Pick<MessageContextValue<StreamChatGenerics>, 'message' | 'isMyMessage'>;\n\nexport type MessageActionsProp<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = (param: MessageActionsParams<StreamChatGenerics>) => MessageActionType[];\n\nexport const messageActions = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n blockUser,\n copyMessage,\n deleteMessage,\n editMessage,\n error,\n flagMessage,\n isMyMessage,\n isThreadMessage,\n message,\n messageReactions,\n ownCapabilities,\n pinMessage,\n quotedReply,\n retry,\n threadReply,\n unpinMessage,\n}: MessageActionsParams<StreamChatGenerics>) => {\n if (messageReactions) {\n return undefined;\n }\n\n const actions: Array<MessageActionType | null> = [];\n\n if (error && isMyMessage) {\n actions.push(retry);\n }\n\n if (ownCapabilities.quoteMessage && !isThreadMessage && !error) {\n actions.push(quotedReply);\n }\n\n if (ownCapabilities.sendReply && !isThreadMessage && !error) {\n actions.push(threadReply);\n }\n\n if (\n (isMyMessage && ownCapabilities.updateOwnMessage) ||\n (!isMyMessage && ownCapabilities.updateAnyMessage)\n ) {\n actions.push(editMessage);\n }\n\n if (copyMessage !== undefined && message.text && !error) {\n actions.push(copyMessage);\n }\n\n if (!isMyMessage && ownCapabilities.flagMessage) {\n actions.push(flagMessage);\n }\n\n if (ownCapabilities.pinMessage && !message.pinned) {\n actions.push(pinMessage);\n }\n\n if (ownCapabilities.pinMessage && message.pinned) {\n actions.push(unpinMessage);\n }\n\n if (!isMyMessage && ownCapabilities.banChannelMembers) {\n actions.push(blockUser);\n }\n\n if (\n (isMyMessage && ownCapabilities.deleteOwnMessage) ||\n (!isMyMessage && ownCapabilities.deleteAnyMessage)\n ) {\n actions.push(deleteMessage);\n }\n\n return actions;\n};\n"]}
@@ -40,7 +40,7 @@ var getReadStates = function getReadStates(clientUserId, messages, read) {
40
40
  return "continue";
41
41
  }
42
42
 
43
- if (message.updated_at < member.last_read) {
43
+ if (message.created_at < member.last_read) {
44
44
  var numberOfReads = Object.keys(read).length;
45
45
 
46
46
  if (numberOfReads === 1) {
@@ -1 +1 @@
1
- {"version":3,"sources":["getReadStates.ts"],"names":["getReadStates","clientUserId","messages","read","readData","reduce","acc","cur","id","filteredMessagesReversed","filter","msg","updated_at","reverse","members","Object","values","memberReadCount","message","length","member","last_read","numberOfReads","keys","currentMessageReadData","userIndex","findIndex","user","splice"],"mappings":";;;;;;;;;;;AAKO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB,CAG3BC,YAH2B,EAI3BC,QAJ2B,EAO3BC,IAP2B,EAQxB;AACH,MAAMC,QAAQ,GAAGF,QAAQ,CAACG,MAAT,CAAgB,UAACC,GAAD,EAAMC,GAAN,EAAc;AAC7C,QAAIA,GAAG,CAACC,EAAR,EAAY;AACVF,MAAAA,GAAG,CAACC,GAAG,CAACC,EAAL,CAAH,GAAc,KAAd;AACD;;AACD,WAAOF,GAAP;AACD,GALgB,EAKd,EALc,CAAjB;AAOA,MAAMG,wBAAwB,GAAGP,QAAQ,CAACQ,MAAT,CAAgB,UAACC,GAAD;AAAA,WAASA,GAAG,CAACC,UAAb;AAAA,GAAhB,EAAyCC,OAAzC,EAAjC;;AAEA,MAAIV,IAAJ,EAAU;AAIR,QAAIF,YAAJ,EAAkB;AAChB,aAAOE,IAAI,CAACF,YAAD,CAAX;AACD;;AACD,QAAMa,OAAO,GAAGC,MAAM,CAACC,MAAP,CAAcb,IAAd,CAAhB;AAKA,QAAIc,eAAe,GAAG,CAAtB;;AASA,yDAAsBR,wBAAtB,wCAAgD;AAAA,UAArCS,OAAqC;;AAM9C,UAAI,CAACJ,OAAO,CAACK,MAAb,EAAqB;AACnBf,QAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuBS,eAAe,IAAI,IAA1C;AACD,OAFD,MAEO;AAAA,mCACMG,MADN;AAOH,cAAI,CAACA,MAAM,CAACC,SAAZ,EAAuB;AACrB;AACD;;AAOD,cAAIH,OAAO,CAACN,UAAR,GAAqBQ,MAAM,CAACC,SAAhC,EAA2C;AAKzC,gBAAMC,aAAa,GAAGP,MAAM,CAACQ,IAAP,CAAYpB,IAAZ,EAAkBgB,MAAxC;;AACA,gBAAIG,aAAa,KAAK,CAAtB,EAAyB;AACvBlB,cAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuB,IAAvB;AACD,aAFD,MAEO;AACL,kBAAMgB,sBAAsB,GAAGpB,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAvC;AACAJ,cAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GACE,OAAOgB,sBAAP,KAAkC,SAAlC,GACIP,eAAe,GAAG,CADtB,GAEIO,sBAAsB,GAAG,CAH/B;AAID;;AACD,gBAAMC,SAAS,GAAGX,OAAO,CAACY,SAAR,CAAkB;AAAA;;AAAA,kBAAGC,IAAH,QAAGA,IAAH;AAAA,qBAAcA,IAAI,CAACnB,EAAL,sBAAYY,MAAM,CAACO,IAAnB,qBAAY,aAAanB,EAAzB,CAAd;AAAA,aAAlB,CAAlB;;AACA,gBAAIiB,SAAS,KAAK,CAAC,CAAnB,EAAsB;AACpBX,cAAAA,OAAO,CAACc,MAAR,CAAeH,SAAf,EAA0B,CAA1B;;AACA,kBAAIH,aAAa,GAAG,CAApB,EAAuB;AACrBL,gBAAAA,eAAe,IAAI,CAAnB;AACD;AACF;AACF;AAtCE;;AACL,8DAAqBH,OAArB,2CAA8B;AAAA,cAAnBM,MAAmB;;AAAA,2BAAnBA,MAAmB;;AAAA,mCAO1B;AA+BH;;AAOD,YAAIhB,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,KAAyB,KAA7B,EAAoC;AAClCJ,UAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuBS,eAAe,IAAI,KAA1C;AACD;AACF;AACF;AACF;;AAED,SAAOb,QAAP;AACD,CArGM","sourcesContent":["import type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';\nimport type { PaginatedMessageListContextValue } from '../../../contexts/paginatedMessageListContext/PaginatedMessageListContext';\nimport type { ThreadContextValue } from '../../../contexts/threadContext/ThreadContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const getReadStates = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n clientUserId: string | undefined,\n messages:\n | PaginatedMessageListContextValue<StreamChatGenerics>['messages']\n | ThreadContextValue<StreamChatGenerics>['threadMessages'],\n read?: ChannelContextValue<StreamChatGenerics>['read'],\n) => {\n const readData = messages.reduce((acc, cur) => {\n if (cur.id) {\n acc[cur.id] = false;\n }\n return acc;\n }, {} as { [key: string]: boolean | number });\n\n const filteredMessagesReversed = messages.filter((msg) => msg.updated_at).reverse();\n\n if (read) {\n /**\n * Channel read state is stored by user and we only care about users who aren't the client\n */\n if (clientUserId) {\n delete read[clientUserId];\n }\n const members = Object.values(read);\n\n /**\n * Track number of members who have read previous messages\n */\n let memberReadCount = 0;\n\n /**\n * Array is in reverse order so newest message is at 0,\n * we find the index of the first message that is older\n * than the last read and then set last read to that, or\n * if there are no newer messages, the first message is\n * last read message.\n */\n for (const message of filteredMessagesReversed) {\n /**\n * If all members are removed then they have read these\n * messages. We do not increment memberReadCount for 1:1\n * chats, so this should be true, not a number in that case.\n */\n if (!members.length) {\n readData[message.id] = memberReadCount || true;\n } else {\n for (const member of members) {\n /**\n * If no last read continue, we can't remove the user\n * because this would mark all messages in a new channel\n * true until at least one other user reads a message.\n */\n if (!member.last_read) {\n continue;\n }\n\n /**\n * If there there is a last read message add the user\n * to the array of last reads for that message and remove\n * the user from the list of users being checked\n */\n if (message.updated_at < member.last_read) {\n /**\n * if this is a direct message the length will be 1\n * as we already deleted the current user from the object\n */\n const numberOfReads = Object.keys(read).length;\n if (numberOfReads === 1) {\n readData[message.id] = true;\n } else {\n const currentMessageReadData = readData[message.id];\n readData[message.id] =\n typeof currentMessageReadData === 'boolean'\n ? memberReadCount + 1\n : currentMessageReadData + 1;\n }\n const userIndex = members.findIndex(({ user }) => user.id === member.user?.id);\n if (userIndex !== -1) {\n members.splice(userIndex, 1);\n if (numberOfReads > 1) {\n memberReadCount += 1;\n }\n }\n }\n }\n\n /**\n * If this is not the last message for a user this will still be\n * set to false. But if other users have read further the number\n * should be how many have read beyond this message.\n */\n if (readData[message.id] === false) {\n readData[message.id] = memberReadCount || false;\n }\n }\n }\n }\n\n return readData;\n};\n"]}
1
+ {"version":3,"sources":["getReadStates.ts"],"names":["getReadStates","clientUserId","messages","read","readData","reduce","acc","cur","id","filteredMessagesReversed","filter","msg","updated_at","reverse","members","Object","values","memberReadCount","message","length","member","last_read","created_at","numberOfReads","keys","currentMessageReadData","userIndex","findIndex","user","splice"],"mappings":";;;;;;;;;;;AAKO,IAAMA,aAAa,GAAG,SAAhBA,aAAgB,CAG3BC,YAH2B,EAI3BC,QAJ2B,EAO3BC,IAP2B,EAQxB;AACH,MAAMC,QAAQ,GAAGF,QAAQ,CAACG,MAAT,CAAgB,UAACC,GAAD,EAAMC,GAAN,EAAc;AAC7C,QAAIA,GAAG,CAACC,EAAR,EAAY;AACVF,MAAAA,GAAG,CAACC,GAAG,CAACC,EAAL,CAAH,GAAc,KAAd;AACD;;AACD,WAAOF,GAAP;AACD,GALgB,EAKd,EALc,CAAjB;AAOA,MAAMG,wBAAwB,GAAGP,QAAQ,CAACQ,MAAT,CAAgB,UAACC,GAAD;AAAA,WAASA,GAAG,CAACC,UAAb;AAAA,GAAhB,EAAyCC,OAAzC,EAAjC;;AAEA,MAAIV,IAAJ,EAAU;AAIR,QAAIF,YAAJ,EAAkB;AAChB,aAAOE,IAAI,CAACF,YAAD,CAAX;AACD;;AACD,QAAMa,OAAO,GAAGC,MAAM,CAACC,MAAP,CAAcb,IAAd,CAAhB;AAKA,QAAIc,eAAe,GAAG,CAAtB;;AASA,yDAAsBR,wBAAtB,wCAAgD;AAAA,UAArCS,OAAqC;;AAM9C,UAAI,CAACJ,OAAO,CAACK,MAAb,EAAqB;AACnBf,QAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuBS,eAAe,IAAI,IAA1C;AACD,OAFD,MAEO;AAAA,mCACMG,MADN;AAOH,cAAI,CAACA,MAAM,CAACC,SAAZ,EAAuB;AACrB;AACD;;AAOD,cAAIH,OAAO,CAACI,UAAR,GAAqBF,MAAM,CAACC,SAAhC,EAA2C;AAKzC,gBAAME,aAAa,GAAGR,MAAM,CAACS,IAAP,CAAYrB,IAAZ,EAAkBgB,MAAxC;;AACA,gBAAII,aAAa,KAAK,CAAtB,EAAyB;AACvBnB,cAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuB,IAAvB;AACD,aAFD,MAEO;AACL,kBAAMiB,sBAAsB,GAAGrB,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAvC;AACAJ,cAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GACE,OAAOiB,sBAAP,KAAkC,SAAlC,GACIR,eAAe,GAAG,CADtB,GAEIQ,sBAAsB,GAAG,CAH/B;AAID;;AACD,gBAAMC,SAAS,GAAGZ,OAAO,CAACa,SAAR,CAAkB;AAAA;;AAAA,kBAAGC,IAAH,QAAGA,IAAH;AAAA,qBAAcA,IAAI,CAACpB,EAAL,sBAAYY,MAAM,CAACQ,IAAnB,qBAAY,aAAapB,EAAzB,CAAd;AAAA,aAAlB,CAAlB;;AACA,gBAAIkB,SAAS,KAAK,CAAC,CAAnB,EAAsB;AACpBZ,cAAAA,OAAO,CAACe,MAAR,CAAeH,SAAf,EAA0B,CAA1B;;AACA,kBAAIH,aAAa,GAAG,CAApB,EAAuB;AACrBN,gBAAAA,eAAe,IAAI,CAAnB;AACD;AACF;AACF;AAtCE;;AACL,8DAAqBH,OAArB,2CAA8B;AAAA,cAAnBM,MAAmB;;AAAA,2BAAnBA,MAAmB;;AAAA,mCAO1B;AA+BH;;AAOD,YAAIhB,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,KAAyB,KAA7B,EAAoC;AAClCJ,UAAAA,QAAQ,CAACc,OAAO,CAACV,EAAT,CAAR,GAAuBS,eAAe,IAAI,KAA1C;AACD;AACF;AACF;AACF;;AAED,SAAOb,QAAP;AACD,CArGM","sourcesContent":["import type { ChannelContextValue } from '../../../contexts/channelContext/ChannelContext';\nimport type { PaginatedMessageListContextValue } from '../../../contexts/paginatedMessageListContext/PaginatedMessageListContext';\nimport type { ThreadContextValue } from '../../../contexts/threadContext/ThreadContext';\nimport type { DefaultStreamChatGenerics } from '../../../types/types';\n\nexport const getReadStates = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n clientUserId: string | undefined,\n messages:\n | PaginatedMessageListContextValue<StreamChatGenerics>['messages']\n | ThreadContextValue<StreamChatGenerics>['threadMessages'],\n read?: ChannelContextValue<StreamChatGenerics>['read'],\n) => {\n const readData = messages.reduce((acc, cur) => {\n if (cur.id) {\n acc[cur.id] = false;\n }\n return acc;\n }, {} as { [key: string]: boolean | number });\n\n const filteredMessagesReversed = messages.filter((msg) => msg.updated_at).reverse();\n\n if (read) {\n /**\n * Channel read state is stored by user and we only care about users who aren't the client\n */\n if (clientUserId) {\n delete read[clientUserId];\n }\n const members = Object.values(read);\n\n /**\n * Track number of members who have read previous messages\n */\n let memberReadCount = 0;\n\n /**\n * Array is in reverse order so newest message is at 0,\n * we find the index of the first message that is older\n * than the last read and then set last read to that, or\n * if there are no newer messages, the first message is\n * last read message.\n */\n for (const message of filteredMessagesReversed) {\n /**\n * If all members are removed then they have read these\n * messages. We do not increment memberReadCount for 1:1\n * chats, so this should be true, not a number in that case.\n */\n if (!members.length) {\n readData[message.id] = memberReadCount || true;\n } else {\n for (const member of members) {\n /**\n * If no last read continue, we can't remove the user\n * because this would mark all messages in a new channel\n * true until at least one other user reads a message.\n */\n if (!member.last_read) {\n continue;\n }\n\n /**\n * If there there is a last read message add the user\n * to the array of last reads for that message and remove\n * the user from the list of users being checked\n */\n if (message.created_at < member.last_read) {\n /**\n * if this is a direct message the length will be 1\n * as we already deleted the current user from the object\n */\n const numberOfReads = Object.keys(read).length;\n if (numberOfReads === 1) {\n readData[message.id] = true;\n } else {\n const currentMessageReadData = readData[message.id];\n readData[message.id] =\n typeof currentMessageReadData === 'boolean'\n ? memberReadCount + 1\n : currentMessageReadData + 1;\n }\n const userIndex = members.findIndex(({ user }) => user.id === member.user?.id);\n if (userIndex !== -1) {\n members.splice(userIndex, 1);\n if (numberOfReads > 1) {\n memberReadCount += 1;\n }\n }\n }\n }\n\n /**\n * If this is not the last message for a user this will still be\n * set to false. But if other users have read further the number\n * should be how many have read beyond this message.\n */\n if (readData[message.id] === false) {\n readData[message.id] = memberReadCount || false;\n }\n }\n }\n }\n\n return readData;\n};\n"]}
@@ -1,7 +1,7 @@
1
1
  Object.defineProperty(exports, "__esModule", {
2
2
  value: true
3
3
  });
4
- exports.triggerHaptic = exports.takePhoto = exports.shareImage = exports.saveFile = exports.registerNativeHandlers = exports.pickDocument = exports.isVideoPackageAvailable = exports.isAudioPackageAvailable = exports.getPhotos = exports.getLocalAssetUri = exports.deleteFile = exports.compressImage = exports.Video = exports.Sound = exports.SDK = exports.NetInfo = exports.FlatList = void 0;
4
+ exports.triggerHaptic = exports.takePhoto = exports.shareImage = exports.setClipboardString = exports.saveFile = exports.registerNativeHandlers = exports.pickDocument = exports.isVideoPackageAvailable = exports.isAudioPackageAvailable = exports.getPhotos = exports.getLocalAssetUri = exports.deleteFile = exports.compressImage = exports.Video = exports.Sound = exports.SDK = exports.NetInfo = exports.FlatList = void 0;
5
5
 
6
6
  var _reactNative = require("react-native");
7
7
 
@@ -28,6 +28,8 @@ var pickDocument = fail;
28
28
  exports.pickDocument = pickDocument;
29
29
  var saveFile = fail;
30
30
  exports.saveFile = saveFile;
31
+ var setClipboardString = fail;
32
+ exports.setClipboardString = setClipboardString;
31
33
  var shareImage = fail;
32
34
  exports.shareImage = shareImage;
33
35
  var takePhoto = fail;
@@ -97,6 +99,10 @@ var registerNativeHandlers = function registerNativeHandlers(handlers) {
97
99
  if (handlers.Video) {
98
100
  exports.Video = Video = handlers.Video;
99
101
  }
102
+
103
+ if (handlers.setClipboardString !== undefined) {
104
+ exports.setClipboardString = setClipboardString = handlers.setClipboardString;
105
+ }
100
106
  };
101
107
 
102
108
  exports.registerNativeHandlers = registerNativeHandlers;
@@ -1 +1 @@
1
- {"version":3,"sources":["native.ts"],"names":["fail","Error","compressImage","deleteFile","getLocalAssetUri","getPhotos","FlatList","DefaultFlatList","NetInfo","addEventListener","fetch","pickDocument","saveFile","shareImage","takePhoto","triggerHaptic","SDK","Sound","Video","registerNativeHandlers","handlers","undefined","isVideoPackageAvailable","isAudioPackageAvailable","Player","initializeSound"],"mappings":";;;;;AACA;;AAMA,IAAMA,IAAI,GAAG,SAAPA,IAAO,GAAM;AACjB,QAAMC,KAAK,CACT,mGADS,CAAX;AAGD,CAJD;;AAiBO,IAAIC,aAA4B,GAAGF,IAAnC;;AAGA,IAAIG,UAAsB,GAAGH,IAA7B;;AAGA,IAAII,gBAAkC,GAAGJ,IAAzC;;AASA,IAAIK,SAAoB,GAAGL,IAA3B;;AAOA,IAAIM,QAAQ,GAAGC,qBAAf;;AAEA,IAAIC,OAAgB,GAAG;AAC5BC,EAAAA,gBAAgB,EAAET,IADU;AAE5BU,EAAAA,KAAK,EAAEV;AAFqB,CAAvB;;AAWA,IAAIW,YAA0B,GAAGX,IAAjC;;AAOA,IAAIY,QAAkB,GAAGZ,IAAzB;;AAOA,IAAIa,UAAsB,GAAGb,IAA7B;;AASA,IAAIc,SAAoB,GAAGd,IAA3B;;AAWA,IAAIe,aAA4B,GAAGf,IAAnC;;AAwBA,IAAIgB,GAAJ;;AA8CA,IAAIC,KAAJ;;AA2CA,IAAIC,KAAJ;;;AAmBA,IAAMC,sBAAsB,GAAG,SAAzBA,sBAAyB,CAACC,QAAD,EAAwB;AAC5D,MAAIA,QAAQ,CAAClB,aAAb,EAA4B;AAC1B,4BAAAA,aAAa,GAAGkB,QAAQ,CAAClB,aAAzB;AACD;;AAED,MAAIkB,QAAQ,CAACjB,UAAb,EAAyB;AACvB,yBAAAA,UAAU,GAAGiB,QAAQ,CAACjB,UAAtB;AACD;;AAED,MAAIiB,QAAQ,CAACd,QAAb,EAAuB;AACrB,uBAAAA,QAAQ,GAAGc,QAAQ,CAACd,QAApB;AACD;;AACD,MAAIc,QAAQ,CAACZ,OAAb,EAAsB;AACpB,sBAAAA,OAAO,GAAGY,QAAQ,CAACZ,OAAnB;AACD;;AAED,MAAIY,QAAQ,CAAChB,gBAAb,EAA+B;AAC7B,+BAAAA,gBAAgB,GAAGgB,QAAQ,CAAChB,gBAA5B;AACD;;AAED,MAAIgB,QAAQ,CAACf,SAAb,EAAwB;AACtB,wBAAAA,SAAS,GAAGe,QAAQ,CAACf,SAArB;AACD;;AAED,MAAIe,QAAQ,CAACT,YAAb,EAA2B;AACzB,2BAAAA,YAAY,GAAGS,QAAQ,CAACT,YAAxB;AACD;;AAED,MAAIS,QAAQ,CAACR,QAAb,EAAuB;AACrB,uBAAAA,QAAQ,GAAGQ,QAAQ,CAACR,QAApB;AACD;;AAED,MAAIQ,QAAQ,CAACJ,GAAb,EAAkB;AAChB,kBAAAA,GAAG,GAAGI,QAAQ,CAACJ,GAAf;AACD;;AAED,MAAII,QAAQ,CAACP,UAAT,KAAwBQ,SAA5B,EAAuC;AACrC,yBAAAR,UAAU,GAAGO,QAAQ,CAACP,UAAtB;AACD;;AAED,MAAIO,QAAQ,CAACH,KAAb,EAAoB;AAClB,oBAAAA,KAAK,GAAGG,QAAQ,CAACH,KAAjB;AACD;;AAED,MAAIG,QAAQ,CAACN,SAAb,EAAwB;AACtB,wBAAAA,SAAS,GAAGM,QAAQ,CAACN,SAArB;AACD;;AAED,MAAIM,QAAQ,CAACL,aAAb,EAA4B;AAC1B,4BAAAA,aAAa,GAAGK,QAAQ,CAACL,aAAzB;AACD;;AAED,MAAIK,QAAQ,CAACF,KAAb,EAAoB;AAClB,oBAAAA,KAAK,GAAGE,QAAQ,CAACF,KAAjB;AACD;AACF,CAvDM;;;;AAyDA,IAAMI,uBAAuB,GAAG,SAA1BA,uBAA0B;AAAA,SAAM,CAAC,CAACJ,KAAR;AAAA,CAAhC;;;;AACA,IAAMK,uBAAuB,GAAG,SAA1BA,uBAA0B;AAAA,SAAM,CAAC,CAACN,KAAK,CAACO,MAAR,IAAkB,CAAC,CAACP,KAAK,CAACQ,eAAhC;AAAA,CAAhC","sourcesContent":["import type React from 'react';\nimport { FlatList as DefaultFlatList, StyleProp, ViewStyle } from 'react-native';\n\nimport type { NetInfoSubscription } from '@react-native-community/netinfo';\n\nimport type { Asset, File } from './types/types';\n\nconst fail = () => {\n throw Error(\n 'Native handler was not registered, you should import stream-chat-expo or stream-chat-react-native',\n );\n};\n\ntype CompressImage = ({\n compressImageQuality,\n height,\n uri,\n width,\n}: {\n compressImageQuality: number;\n height: number;\n uri: string;\n width: number;\n}) => Promise<string> | never;\nexport let compressImage: CompressImage = fail;\n\ntype DeleteFile = ({ uri }: { uri: string }) => Promise<boolean> | never;\nexport let deleteFile: DeleteFile = fail;\n\ntype GetLocalAssetUri = (uriOrAssetId: string) => Promise<string> | never;\nexport let getLocalAssetUri: GetLocalAssetUri = fail;\n\ntype GetPhotos = ({ after, first }: { first: number; after?: string }) =>\n | Promise<{\n assets: Array<Omit<Asset, 'source'> & { source: 'picker' }>;\n endCursor: string;\n hasNextPage: boolean;\n }>\n | never;\nexport let getPhotos: GetPhotos = fail;\n\ntype NetInfo = {\n addEventListener: (listener: (isConnected: boolean) => void) => NetInfoSubscription | never;\n fetch: (requestedInterface?: string | undefined) => Promise<boolean> | never;\n};\n\nexport let FlatList = DefaultFlatList;\n\nexport let NetInfo: NetInfo = {\n addEventListener: fail,\n fetch: fail,\n};\n\ntype PickDocument = ({ maxNumberOfFiles }: { maxNumberOfFiles?: number }) =>\n | Promise<{\n cancelled: boolean;\n docs?: File[];\n }>\n | never;\nexport let pickDocument: PickDocument = fail;\n\ntype SaveFileOptions = {\n fileName: string;\n fromUrl: string;\n};\ntype SaveFile = (options: SaveFileOptions) => Promise<string> | never;\nexport let saveFile: SaveFile = fail;\n\ntype ShareOptions = {\n type?: string;\n url?: string;\n};\ntype ShareImage = (options: ShareOptions) => Promise<boolean> | never;\nexport let shareImage: ShareImage = fail;\n\ntype Photo =\n | (Omit<Asset, 'source'> & {\n cancelled: false;\n source: 'camera';\n })\n | { cancelled: true };\ntype TakePhoto = (options: { compressImageQuality?: number }) => Promise<Photo> | never;\nexport let takePhoto: TakePhoto = fail;\n\ntype HapticFeedbackMethod =\n | 'impactHeavy'\n | 'impactLight'\n | 'impactMedium'\n | 'notificationError'\n | 'notificationSuccess'\n | 'notificationWarning'\n | 'selection';\ntype TriggerHaptic = (method: HapticFeedbackMethod) => void | never;\nexport let triggerHaptic: TriggerHaptic = fail;\n\nexport type PlaybackStatus = {\n didJustFinish: boolean;\n durationMillis: number;\n error: string;\n isBuffering: boolean;\n isLoaded: boolean;\n isLooping: boolean;\n isPlaying: boolean;\n positionMillis: number;\n};\n\nexport type AVPlaybackStatusToSet = {\n isLooping: boolean;\n isMuted: boolean;\n positionMillis: number;\n progressUpdateIntervalMillis: number;\n rate: number;\n shouldCorrectPitch: boolean;\n shouldPlay: boolean;\n volume: number;\n};\n\nexport let SDK: string;\n\nexport type SoundOptions = {\n basePathOrCallback?: string;\n callback?: () => void;\n filenameOrFile?: string;\n initialStatus?: Partial<AVPlaybackStatusToSet>;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n source?: { uri: string };\n};\n\nexport type SoundReturnType = {\n paused: boolean;\n testID: string;\n getDuration?: () => number;\n isPlaying?: () => boolean;\n onBuffer?: (props: { isBuffering: boolean }) => void;\n onEnd?: () => void;\n onLoad?: (payload: VideoPayloadData) => void;\n onLoadStart?: () => void;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n onProgress?: (data: VideoProgressData) => void;\n onReadyForDisplay?: () => void;\n pauseAsync?: () => void;\n play?: () => void;\n playAsync?: () => void;\n replayAsync?: () => void;\n resizeMode?: string;\n seek?: (progress: number) => void;\n setPositionAsync?: (millis: number) => void;\n soundRef?: React.RefObject<SoundReturnType>;\n stopAsync?: () => void;\n style?: StyleProp<ViewStyle>;\n unloadAsync?: () => void;\n uri?: string;\n};\n\nexport type SoundType = {\n initializeSound: (\n source?: { uri: string },\n initialStatus?: Partial<AVPlaybackStatusToSet>,\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void,\n ) => Promise<SoundReturnType | null>;\n Player: React.ComponentType<SoundReturnType> | null;\n};\n\nexport let Sound: SoundType;\n\nexport type VideoProgressData = {\n currentTime: number;\n seekableDuration: number;\n playableDuration?: number;\n};\n\nexport type VideoPayloadData = {\n duration: number;\n audioTracks?: { index: number; language: string; title: string; type: string }[];\n currentPosition?: number;\n naturalSize?: { height: number; orientation: 'portrait' | 'landscape'; width: number };\n textTracks?: { index: number; language: string; title: string; type: string }[];\n videoTracks?: {\n bitrate: number;\n codecs: string;\n height: number;\n trackId: number;\n width: number;\n }[];\n};\n\nexport type VideoType = {\n paused: boolean;\n testID: string;\n uri: string;\n videoRef: React.RefObject<VideoType>;\n onBuffer?: (props: { isBuffering: boolean }) => void;\n onEnd?: () => void;\n onLoad?: (payload: VideoPayloadData) => void;\n onLoadStart?: () => void;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n onProgress?: (data: VideoProgressData) => void;\n onReadyForDisplay?: () => void;\n repeat?: boolean;\n replayAsync?: () => void;\n resizeMode?: string;\n seek?: (progress: number) => void;\n setPositionAsync?: (position: number) => void;\n style?: StyleProp<ViewStyle>;\n};\n\nexport let Video: React.ComponentType<VideoType>;\n\ntype Handlers = {\n compressImage?: CompressImage;\n deleteFile?: DeleteFile;\n FlatList?: typeof DefaultFlatList;\n getLocalAssetUri?: GetLocalAssetUri;\n getPhotos?: GetPhotos;\n NetInfo?: NetInfo;\n pickDocument?: PickDocument;\n saveFile?: SaveFile;\n SDK?: string;\n shareImage?: ShareImage;\n Sound?: SoundType;\n takePhoto?: TakePhoto;\n triggerHaptic?: TriggerHaptic;\n Video?: React.ComponentType<VideoType>;\n};\n\nexport const registerNativeHandlers = (handlers: Handlers) => {\n if (handlers.compressImage) {\n compressImage = handlers.compressImage;\n }\n\n if (handlers.deleteFile) {\n deleteFile = handlers.deleteFile;\n }\n\n if (handlers.FlatList) {\n FlatList = handlers.FlatList;\n }\n if (handlers.NetInfo) {\n NetInfo = handlers.NetInfo;\n }\n\n if (handlers.getLocalAssetUri) {\n getLocalAssetUri = handlers.getLocalAssetUri;\n }\n\n if (handlers.getPhotos) {\n getPhotos = handlers.getPhotos;\n }\n\n if (handlers.pickDocument) {\n pickDocument = handlers.pickDocument;\n }\n\n if (handlers.saveFile) {\n saveFile = handlers.saveFile;\n }\n\n if (handlers.SDK) {\n SDK = handlers.SDK;\n }\n\n if (handlers.shareImage !== undefined) {\n shareImage = handlers.shareImage;\n }\n\n if (handlers.Sound) {\n Sound = handlers.Sound;\n }\n\n if (handlers.takePhoto) {\n takePhoto = handlers.takePhoto;\n }\n\n if (handlers.triggerHaptic) {\n triggerHaptic = handlers.triggerHaptic;\n }\n\n if (handlers.Video) {\n Video = handlers.Video;\n }\n};\n\nexport const isVideoPackageAvailable = () => !!Video;\nexport const isAudioPackageAvailable = () => !!Sound.Player || !!Sound.initializeSound;\n"]}
1
+ {"version":3,"sources":["native.ts"],"names":["fail","Error","compressImage","deleteFile","getLocalAssetUri","getPhotos","FlatList","DefaultFlatList","NetInfo","addEventListener","fetch","pickDocument","saveFile","setClipboardString","shareImage","takePhoto","triggerHaptic","SDK","Sound","Video","registerNativeHandlers","handlers","undefined","isVideoPackageAvailable","isAudioPackageAvailable","Player","initializeSound"],"mappings":"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","sourcesContent":["import type React from 'react';\nimport { FlatList as DefaultFlatList, StyleProp, ViewStyle } from 'react-native';\n\nimport type { NetInfoSubscription } from '@react-native-community/netinfo';\n\nimport type { Asset, File } from './types/types';\n\nconst fail = () => {\n throw Error(\n 'Native handler was not registered, you should import stream-chat-expo or stream-chat-react-native',\n );\n};\n\ntype CompressImage = ({\n compressImageQuality,\n height,\n uri,\n width,\n}: {\n compressImageQuality: number;\n height: number;\n uri: string;\n width: number;\n}) => Promise<string> | never;\nexport let compressImage: CompressImage = fail;\n\ntype DeleteFile = ({ uri }: { uri: string }) => Promise<boolean> | never;\nexport let deleteFile: DeleteFile = fail;\n\ntype GetLocalAssetUri = (uriOrAssetId: string) => Promise<string> | never;\nexport let getLocalAssetUri: GetLocalAssetUri = fail;\n\ntype GetPhotos = ({ after, first }: { first: number; after?: string }) =>\n | Promise<{\n assets: Array<Omit<Asset, 'source'> & { source: 'picker' }>;\n endCursor: string;\n hasNextPage: boolean;\n }>\n | never;\nexport let getPhotos: GetPhotos = fail;\n\ntype NetInfo = {\n addEventListener: (listener: (isConnected: boolean) => void) => NetInfoSubscription | never;\n fetch: (requestedInterface?: string | undefined) => Promise<boolean> | never;\n};\n\nexport let FlatList = DefaultFlatList;\n\nexport let NetInfo: NetInfo = {\n addEventListener: fail,\n fetch: fail,\n};\n\ntype PickDocument = ({ maxNumberOfFiles }: { maxNumberOfFiles?: number }) =>\n | Promise<{\n cancelled: boolean;\n docs?: File[];\n }>\n | never;\nexport let pickDocument: PickDocument = fail;\n\ntype SaveFileOptions = {\n fileName: string;\n fromUrl: string;\n};\ntype SaveFile = (options: SaveFileOptions) => Promise<string> | never;\nexport let saveFile: SaveFile = fail;\n\ntype SetClipboardString = (text: string) => Promise<void> | never;\nexport let setClipboardString: SetClipboardString = fail;\n\ntype ShareOptions = {\n type?: string;\n url?: string;\n};\ntype ShareImage = (options: ShareOptions) => Promise<boolean> | never;\nexport let shareImage: ShareImage = fail;\n\ntype Photo =\n | (Omit<Asset, 'source'> & {\n cancelled: false;\n source: 'camera';\n })\n | { cancelled: true };\ntype TakePhoto = (options: { compressImageQuality?: number }) => Promise<Photo> | never;\nexport let takePhoto: TakePhoto = fail;\n\ntype HapticFeedbackMethod =\n | 'impactHeavy'\n | 'impactLight'\n | 'impactMedium'\n | 'notificationError'\n | 'notificationSuccess'\n | 'notificationWarning'\n | 'selection';\ntype TriggerHaptic = (method: HapticFeedbackMethod) => void | never;\nexport let triggerHaptic: TriggerHaptic = fail;\n\nexport type PlaybackStatus = {\n didJustFinish: boolean;\n durationMillis: number;\n error: string;\n isBuffering: boolean;\n isLoaded: boolean;\n isLooping: boolean;\n isPlaying: boolean;\n positionMillis: number;\n};\n\nexport type AVPlaybackStatusToSet = {\n isLooping: boolean;\n isMuted: boolean;\n positionMillis: number;\n progressUpdateIntervalMillis: number;\n rate: number;\n shouldCorrectPitch: boolean;\n shouldPlay: boolean;\n volume: number;\n};\n\nexport let SDK: string;\n\nexport type SoundOptions = {\n basePathOrCallback?: string;\n callback?: () => void;\n filenameOrFile?: string;\n initialStatus?: Partial<AVPlaybackStatusToSet>;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n source?: { uri: string };\n};\n\nexport type SoundReturnType = {\n paused: boolean;\n testID: string;\n getDuration?: () => number;\n isPlaying?: () => boolean;\n onBuffer?: (props: { isBuffering: boolean }) => void;\n onEnd?: () => void;\n onLoad?: (payload: VideoPayloadData) => void;\n onLoadStart?: () => void;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n onProgress?: (data: VideoProgressData) => void;\n onReadyForDisplay?: () => void;\n pauseAsync?: () => void;\n play?: () => void;\n playAsync?: () => void;\n replayAsync?: () => void;\n resizeMode?: string;\n seek?: (progress: number) => void;\n setPositionAsync?: (millis: number) => void;\n soundRef?: React.RefObject<SoundReturnType>;\n stopAsync?: () => void;\n style?: StyleProp<ViewStyle>;\n unloadAsync?: () => void;\n uri?: string;\n};\n\nexport type SoundType = {\n initializeSound: (\n source?: { uri: string },\n initialStatus?: Partial<AVPlaybackStatusToSet>,\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void,\n ) => Promise<SoundReturnType | null>;\n Player: React.ComponentType<SoundReturnType> | null;\n};\n\nexport let Sound: SoundType;\n\nexport type VideoProgressData = {\n currentTime: number;\n seekableDuration: number;\n playableDuration?: number;\n};\n\nexport type VideoPayloadData = {\n duration: number;\n audioTracks?: { index: number; language: string; title: string; type: string }[];\n currentPosition?: number;\n naturalSize?: { height: number; orientation: 'portrait' | 'landscape'; width: number };\n textTracks?: { index: number; language: string; title: string; type: string }[];\n videoTracks?: {\n bitrate: number;\n codecs: string;\n height: number;\n trackId: number;\n width: number;\n }[];\n};\n\nexport type VideoType = {\n paused: boolean;\n testID: string;\n uri: string;\n videoRef: React.RefObject<VideoType>;\n onBuffer?: (props: { isBuffering: boolean }) => void;\n onEnd?: () => void;\n onLoad?: (payload: VideoPayloadData) => void;\n onLoadStart?: () => void;\n onPlaybackStatusUpdate?: (playbackStatus: PlaybackStatus) => void;\n onProgress?: (data: VideoProgressData) => void;\n onReadyForDisplay?: () => void;\n repeat?: boolean;\n replayAsync?: () => void;\n resizeMode?: string;\n seek?: (progress: number) => void;\n setPositionAsync?: (position: number) => void;\n style?: StyleProp<ViewStyle>;\n};\n\nexport let Video: React.ComponentType<VideoType>;\n\ntype Handlers = {\n compressImage?: CompressImage;\n deleteFile?: DeleteFile;\n FlatList?: typeof DefaultFlatList;\n getLocalAssetUri?: GetLocalAssetUri;\n getPhotos?: GetPhotos;\n NetInfo?: NetInfo;\n pickDocument?: PickDocument;\n saveFile?: SaveFile;\n SDK?: string;\n setClipboardString?: SetClipboardString;\n shareImage?: ShareImage;\n Sound?: SoundType;\n takePhoto?: TakePhoto;\n triggerHaptic?: TriggerHaptic;\n Video?: React.ComponentType<VideoType>;\n};\n\nexport const registerNativeHandlers = (handlers: Handlers) => {\n if (handlers.compressImage) {\n compressImage = handlers.compressImage;\n }\n\n if (handlers.deleteFile) {\n deleteFile = handlers.deleteFile;\n }\n\n if (handlers.FlatList) {\n FlatList = handlers.FlatList;\n }\n if (handlers.NetInfo) {\n NetInfo = handlers.NetInfo;\n }\n\n if (handlers.getLocalAssetUri) {\n getLocalAssetUri = handlers.getLocalAssetUri;\n }\n\n if (handlers.getPhotos) {\n getPhotos = handlers.getPhotos;\n }\n\n if (handlers.pickDocument) {\n pickDocument = handlers.pickDocument;\n }\n\n if (handlers.saveFile) {\n saveFile = handlers.saveFile;\n }\n\n if (handlers.SDK) {\n SDK = handlers.SDK;\n }\n\n if (handlers.shareImage !== undefined) {\n shareImage = handlers.shareImage;\n }\n\n if (handlers.Sound) {\n Sound = handlers.Sound;\n }\n\n if (handlers.takePhoto) {\n takePhoto = handlers.takePhoto;\n }\n\n if (handlers.triggerHaptic) {\n triggerHaptic = handlers.triggerHaptic;\n }\n\n if (handlers.Video) {\n Video = handlers.Video;\n }\n\n if (handlers.setClipboardString !== undefined) {\n setClipboardString = handlers.setClipboardString;\n }\n};\n\nexport const isVideoPackageAvailable = () => !!Video;\nexport const isAudioPackageAvailable = () => !!Sound.Player || !!Sound.initializeSound;\n"]}
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "5.4.4-beta.1"
2
+ "version": "5.5.0-beta.2"
3
3
  }
@@ -12,7 +12,7 @@ export declare const useMessageActions: <StreamChatGenerics extends DefaultStrea
12
12
  onThreadSelect?: ((message: MessageType<StreamChatGenerics>) => void) | undefined;
13
13
  }) => {
14
14
  blockUser: MessageActionType;
15
- copyMessage: MessageActionType;
15
+ copyMessage: MessageActionType | undefined;
16
16
  deleteMessage: MessageActionType;
17
17
  editMessage: MessageActionType;
18
18
  flagMessage: MessageActionType;
@@ -4,7 +4,6 @@ import type { DefaultStreamChatGenerics } from '../../../types/types';
4
4
  import type { MessageActionType } from '../../MessageOverlay/MessageActionListItem';
5
5
  export declare type MessageActionsParams<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = {
6
6
  blockUser: MessageActionType;
7
- copyMessage: MessageActionType;
8
7
  deleteMessage: MessageActionType;
9
8
  dismissOverlay: () => void;
10
9
  editMessage: MessageActionType;
@@ -19,6 +18,7 @@ export declare type MessageActionsParams<StreamChatGenerics extends DefaultStrea
19
18
  retry: MessageActionType;
20
19
  threadReply: MessageActionType;
21
20
  unpinMessage: MessageActionType;
21
+ copyMessage?: MessageActionType;
22
22
  } & Pick<MessageContextValue<StreamChatGenerics>, 'message' | 'isMyMessage'>;
23
23
  export declare type MessageActionsProp<StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics> = (param: MessageActionsParams<StreamChatGenerics>) => MessageActionType[];
24
24
  export declare const messageActions: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>({ blockUser, copyMessage, deleteMessage, editMessage, error, flagMessage, isMyMessage, isThreadMessage, message, messageReactions, ownCapabilities, pinMessage, quotedReply, retry, threadReply, unpinMessage, }: MessageActionsParams<StreamChatGenerics>) => (MessageActionType | null)[] | undefined;
@@ -45,6 +45,8 @@ declare type SaveFileOptions = {
45
45
  };
46
46
  declare type SaveFile = (options: SaveFileOptions) => Promise<string> | never;
47
47
  export declare let saveFile: SaveFile;
48
+ declare type SetClipboardString = (text: string) => Promise<void> | never;
49
+ export declare let setClipboardString: SetClipboardString;
48
50
  declare type ShareOptions = {
49
51
  type?: string;
50
52
  url?: string;
@@ -194,6 +196,7 @@ declare type Handlers = {
194
196
  pickDocument?: PickDocument;
195
197
  saveFile?: SaveFile;
196
198
  SDK?: string;
199
+ setClipboardString?: SetClipboardString;
197
200
  shareImage?: ShareImage;
198
201
  Sound?: SoundType;
199
202
  takePhoto?: TakePhoto;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "stream-chat-react-native-core",
3
3
  "description": "The official React Native and Expo components for Stream Chat, a service for building chat applications",
4
- "version": "5.4.4-beta.1",
4
+ "version": "5.5.0-beta.2",
5
5
  "author": {
6
6
  "company": "Stream.io Inc",
7
7
  "name": "Stream.io Inc"
@@ -1,5 +1,5 @@
1
1
  import React from 'react';
2
- import { Alert, Clipboard } from 'react-native';
2
+ import { Alert } from 'react-native';
3
3
 
4
4
  import { useMessageActionHandlers } from './useMessageActionHandlers';
5
5
 
@@ -24,6 +24,7 @@ import {
24
24
  Unpin,
25
25
  UserDelete,
26
26
  } from '../../../icons';
27
+ import { setClipboardString } from '../../../native';
27
28
  import type { DefaultStreamChatGenerics } from '../../../types/types';
28
29
  import { MessageStatusTypes } from '../../../utils/utils';
29
30
 
@@ -147,19 +148,21 @@ export const useMessageActions = <
147
148
  title: message.user?.banned ? t('Unblock User') : t('Block User'),
148
149
  };
149
150
 
150
- const copyMessage: MessageActionType = {
151
- // using depreciated Clipboard from react-native until expo supports the community version or their own
152
- action: () => {
153
- setOverlay('none');
154
- if (handleCopy) {
155
- handleCopy(message);
156
- }
157
- Clipboard.setString(message.text || '');
158
- },
159
- actionType: 'copyMessage',
160
- icon: <Copy pathFill={grey} />,
161
- title: t('Copy Message'),
162
- };
151
+ const copyMessage: MessageActionType | undefined =
152
+ setClipboardString !== null
153
+ ? {
154
+ action: () => {
155
+ setOverlay('none');
156
+ if (handleCopy) {
157
+ handleCopy(message);
158
+ }
159
+ setClipboardString(message.text || '');
160
+ },
161
+ actionType: 'copyMessage',
162
+ icon: <Copy pathFill={grey} />,
163
+ title: t('Copy Message'),
164
+ }
165
+ : undefined;
163
166
 
164
167
  const deleteMessage: MessageActionType = {
165
168
  action: () => {
@@ -7,7 +7,6 @@ export type MessageActionsParams<
7
7
  StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
8
8
  > = {
9
9
  blockUser: MessageActionType;
10
- copyMessage: MessageActionType;
11
10
  deleteMessage: MessageActionType;
12
11
  dismissOverlay: () => void;
13
12
  editMessage: MessageActionType;
@@ -22,6 +21,7 @@ export type MessageActionsParams<
22
21
  retry: MessageActionType;
23
22
  threadReply: MessageActionType;
24
23
  unpinMessage: MessageActionType;
24
+ copyMessage?: MessageActionType;
25
25
  } & Pick<MessageContextValue<StreamChatGenerics>, 'message' | 'isMyMessage'>;
26
26
 
27
27
  export type MessageActionsProp<
@@ -73,7 +73,7 @@ export const messageActions = <
73
73
  actions.push(editMessage);
74
74
  }
75
75
 
76
- if (message.text && !error) {
76
+ if (copyMessage !== undefined && message.text && !error) {
77
77
  actions.push(copyMessage);
78
78
  }
79
79
 
@@ -66,7 +66,7 @@ export const getReadStates = <
66
66
  * to the array of last reads for that message and remove
67
67
  * the user from the list of users being checked
68
68
  */
69
- if (message.updated_at < member.last_read) {
69
+ if (message.created_at < member.last_read) {
70
70
  /**
71
71
  * if this is a direct message the length will be 1
72
72
  * as we already deleted the current user from the object
package/src/native.ts CHANGED
@@ -66,6 +66,9 @@ type SaveFileOptions = {
66
66
  type SaveFile = (options: SaveFileOptions) => Promise<string> | never;
67
67
  export let saveFile: SaveFile = fail;
68
68
 
69
+ type SetClipboardString = (text: string) => Promise<void> | never;
70
+ export let setClipboardString: SetClipboardString = fail;
71
+
69
72
  type ShareOptions = {
70
73
  type?: string;
71
74
  url?: string;
@@ -216,6 +219,7 @@ type Handlers = {
216
219
  pickDocument?: PickDocument;
217
220
  saveFile?: SaveFile;
218
221
  SDK?: string;
222
+ setClipboardString?: SetClipboardString;
219
223
  shareImage?: ShareImage;
220
224
  Sound?: SoundType;
221
225
  takePhoto?: TakePhoto;
@@ -278,6 +282,10 @@ export const registerNativeHandlers = (handlers: Handlers) => {
278
282
  if (handlers.Video) {
279
283
  Video = handlers.Video;
280
284
  }
285
+
286
+ if (handlers.setClipboardString !== undefined) {
287
+ setClipboardString = handlers.setClipboardString;
288
+ }
281
289
  };
282
290
 
283
291
  export const isVideoPackageAvailable = () => !!Video;
package/src/version.json CHANGED
@@ -1,3 +1,3 @@
1
1
  {
2
- "version": "5.4.4-beta.1"
2
+ "version": "5.5.0-beta.2"
3
3
  }