stream-chat-react-native-core 4.5.0 → 4.6.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/README.md +3 -3
  2. package/lib/commonjs/components/Attachment/FileIcon.js +9 -1
  3. package/lib/commonjs/components/Attachment/FileIcon.js.map +1 -1
  4. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +232 -48
  5. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  6. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  7. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  8. package/lib/commonjs/components/Message/Message.js.map +1 -1
  9. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +39 -21
  10. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
  11. package/lib/commonjs/components/Message/MessageSimple/utils/renderText.md +1 -1
  12. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +1 -1
  13. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  14. package/lib/commonjs/components/MessageInput/MessageInput.js +129 -44
  15. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  16. package/lib/commonjs/components/Reply/Reply.js +25 -9
  17. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  18. package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js +15 -8
  19. package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  20. package/lib/commonjs/contexts/channelContext/ChannelContext.js.map +1 -1
  21. package/lib/commonjs/contexts/channelContext/ChannelContext.md +1 -1
  22. package/lib/commonjs/contexts/channelsContext/ChannelsContext.js.map +1 -1
  23. package/lib/commonjs/contexts/channelsContext/ChannelsContext.md +1 -1
  24. package/lib/commonjs/contexts/chatContext/ChatContext.md +1 -1
  25. package/lib/commonjs/contexts/imageGalleryContext/ImageGalleryContext.md +1 -1
  26. package/lib/commonjs/contexts/keyboardContext/KeyboardContext.md +1 -1
  27. package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
  28. package/lib/commonjs/contexts/messageContext/MessageContext.md +1 -1
  29. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +10 -7
  30. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  31. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.md +1 -1
  32. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js +16 -1
  33. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  34. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  35. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  36. package/lib/commonjs/contexts/messagesContext/MessagesContext.md +1 -1
  37. package/lib/commonjs/contexts/overlayContext/OverlayContext.md +1 -1
  38. package/lib/commonjs/contexts/paginatedMessageListContext/PaginatedMessageListContext.md +1 -1
  39. package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.md +1 -1
  40. package/lib/commonjs/contexts/themeContext/utils/theme.js +1 -0
  41. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  42. package/lib/commonjs/contexts/typingContext/TypingContext.md +1 -1
  43. package/lib/commonjs/icons/Recorder.js +47 -0
  44. package/lib/commonjs/icons/Recorder.js.map +1 -0
  45. package/lib/commonjs/icons/Video.js +82 -0
  46. package/lib/commonjs/icons/Video.js.map +1 -0
  47. package/lib/commonjs/icons/index.js +26 -0
  48. package/lib/commonjs/icons/index.js.map +1 -1
  49. package/lib/commonjs/native.js.map +1 -1
  50. package/lib/commonjs/version.json +1 -1
  51. package/lib/module/components/Attachment/FileIcon.js +9 -1
  52. package/lib/module/components/Attachment/FileIcon.js.map +1 -1
  53. package/lib/module/components/AttachmentPicker/AttachmentPicker.js +232 -48
  54. package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  55. package/lib/module/components/Channel/Channel.js.map +1 -1
  56. package/lib/module/components/Chat/Chat.js.map +1 -1
  57. package/lib/module/components/Message/Message.js.map +1 -1
  58. package/lib/module/components/Message/MessageSimple/MessageContent.js +39 -21
  59. package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
  60. package/lib/module/components/Message/MessageSimple/utils/renderText.md +1 -1
  61. package/lib/module/components/MessageInput/FileUploadPreview.js +1 -1
  62. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  63. package/lib/module/components/MessageInput/MessageInput.js +129 -44
  64. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  65. package/lib/module/components/Reply/Reply.js +25 -9
  66. package/lib/module/components/Reply/Reply.js.map +1 -1
  67. package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js +15 -8
  68. package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  69. package/lib/module/contexts/channelContext/ChannelContext.js.map +1 -1
  70. package/lib/module/contexts/channelContext/ChannelContext.md +1 -1
  71. package/lib/module/contexts/channelsContext/ChannelsContext.js.map +1 -1
  72. package/lib/module/contexts/channelsContext/ChannelsContext.md +1 -1
  73. package/lib/module/contexts/chatContext/ChatContext.md +1 -1
  74. package/lib/module/contexts/imageGalleryContext/ImageGalleryContext.md +1 -1
  75. package/lib/module/contexts/keyboardContext/KeyboardContext.md +1 -1
  76. package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
  77. package/lib/module/contexts/messageContext/MessageContext.md +1 -1
  78. package/lib/module/contexts/messageInputContext/MessageInputContext.js +10 -7
  79. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  80. package/lib/module/contexts/messageInputContext/MessageInputContext.md +1 -1
  81. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js +16 -1
  82. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  83. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  84. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  85. package/lib/module/contexts/messagesContext/MessagesContext.md +1 -1
  86. package/lib/module/contexts/overlayContext/OverlayContext.md +1 -1
  87. package/lib/module/contexts/paginatedMessageListContext/PaginatedMessageListContext.md +1 -1
  88. package/lib/module/contexts/suggestionsContext/SuggestionsContext.md +1 -1
  89. package/lib/module/contexts/themeContext/utils/theme.js +1 -0
  90. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  91. package/lib/module/contexts/typingContext/TypingContext.md +1 -1
  92. package/lib/module/icons/Recorder.js +47 -0
  93. package/lib/module/icons/Recorder.js.map +1 -0
  94. package/lib/module/icons/Video.js +82 -0
  95. package/lib/module/icons/Video.js.map +1 -0
  96. package/lib/module/icons/index.js +26 -0
  97. package/lib/module/icons/index.js.map +1 -1
  98. package/lib/module/native.js.map +1 -1
  99. package/lib/module/version.json +1 -1
  100. package/lib/typescript/components/AttachmentPicker/AttachmentPicker.d.ts +6 -6
  101. package/lib/typescript/components/Channel/Channel.d.ts +2 -2
  102. package/lib/typescript/components/Chat/Chat.d.ts +1 -1
  103. package/lib/typescript/components/Message/Message.d.ts +2 -2
  104. package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
  105. package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts +9 -8
  106. package/lib/typescript/contexts/channelContext/ChannelContext.d.ts +2 -2
  107. package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts +6 -6
  108. package/lib/typescript/contexts/messageContext/MessageContext.d.ts +2 -2
  109. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +10 -21
  110. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +6 -6
  111. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +20 -20
  112. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +2 -1
  113. package/lib/typescript/icons/Recorder.d.ts +3 -0
  114. package/lib/typescript/icons/Video.d.ts +3 -0
  115. package/lib/typescript/icons/index.d.ts +2 -0
  116. package/lib/typescript/native.d.ts +3 -14
  117. package/lib/typescript/types/types.d.ts +24 -0
  118. package/package.json +1 -1
  119. package/src/components/Attachment/FileIcon.tsx +45 -0
  120. package/src/components/AttachmentPicker/AttachmentPicker.tsx +210 -60
  121. package/src/components/Channel/Channel.tsx +2 -2
  122. package/src/components/Chat/Chat.tsx +1 -1
  123. package/src/components/Message/Message.tsx +2 -2
  124. package/src/components/Message/MessageSimple/MessageContent.tsx +23 -12
  125. package/src/components/Message/MessageSimple/utils/renderText.md +1 -1
  126. package/src/components/MessageInput/FileUploadPreview.tsx +1 -1
  127. package/src/components/MessageInput/MessageInput.tsx +106 -19
  128. package/src/components/Reply/Reply.tsx +31 -14
  129. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +12 -0
  130. package/src/contexts/attachmentPickerContext/AttachmentPickerContext.tsx +12 -8
  131. package/src/contexts/channelContext/ChannelContext.md +1 -1
  132. package/src/contexts/channelContext/ChannelContext.tsx +2 -2
  133. package/src/contexts/channelsContext/ChannelsContext.md +1 -1
  134. package/src/contexts/channelsContext/ChannelsContext.tsx +6 -6
  135. package/src/contexts/chatContext/ChatContext.md +1 -1
  136. package/src/contexts/imageGalleryContext/ImageGalleryContext.md +1 -1
  137. package/src/contexts/keyboardContext/KeyboardContext.md +1 -1
  138. package/src/contexts/messageContext/MessageContext.md +1 -1
  139. package/src/contexts/messageContext/MessageContext.tsx +2 -2
  140. package/src/contexts/messageInputContext/MessageInputContext.md +1 -1
  141. package/src/contexts/messageInputContext/MessageInputContext.tsx +23 -30
  142. package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +17 -1
  143. package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +6 -6
  144. package/src/contexts/messagesContext/MessagesContext.md +1 -1
  145. package/src/contexts/messagesContext/MessagesContext.tsx +20 -20
  146. package/src/contexts/overlayContext/OverlayContext.md +1 -1
  147. package/src/contexts/paginatedMessageListContext/PaginatedMessageListContext.md +1 -1
  148. package/src/contexts/suggestionsContext/SuggestionsContext.md +1 -1
  149. package/src/contexts/themeContext/utils/theme.ts +3 -1
  150. package/src/contexts/typingContext/TypingContext.md +1 -1
  151. package/src/icons/Recorder.tsx +16 -0
  152. package/src/icons/Video.tsx +37 -0
  153. package/src/icons/index.ts +2 -0
  154. package/src/native.ts +4 -14
  155. package/src/types/types.ts +27 -0
  156. package/src/version.json +1 -1
@@ -1 +1 @@
1
- {"version":3,"sources":["MessageInput.tsx"],"names":["styles","StyleSheet","create","attachmentSeparator","borderBottomWidth","marginBottom","autoCompleteInputContainer","alignItems","flexDirection","paddingLeft","paddingRight","composerContainer","container","borderTopWidth","padding","inputBoxContainer","borderRadius","borderWidth","flex","optionsContainer","paddingBottom","replyContainer","paddingHorizontal","sendButtonContainer","suggestionsListContainer","elevation","left","position","right","shadowOffset","height","width","shadowOpacity","MessageInputWithContext","props","additionalTextInputProps","asyncIds","asyncUploads","AutoCompleteSuggestionList","closeAttachmentPicker","cooldownEndsAt","CooldownTimer","disabled","editing","FileUploadPreview","fileUploads","giphyActive","ImageUploadPreview","imageUploads","Input","inputBoxRef","InputButtons","InputEditingStateHeader","InputGiphySearch","InputReplyStateHeader","isValidMessage","maxNumberOfFiles","members","mentionedUsers","numberOfUploads","quotedMessage","removeImage","Reply","resetInput","SendButton","sending","sendMessageAsync","ShowThreadMessageInChannelButton","suggestions","thread","threadList","triggerType","uploadNewImage","watchers","setHeight","theme","colors","border","grey_whisper","white","white_smoke","messageInput","attachmentSelectionBar","suggestionListContainer","attachmentPickerBottomSheetHeight","attachmentSelectionBarHeight","bottomInset","selectedImages","selectedPicker","setMaxNumberOfFiles","setSelectedImages","cooldownRemainingSeconds","seconds","hasResetImages","setHasResetImages","selectedImagesLength","length","imageUploadsLength","imagesForInput","forEach","image","id","imagesToUpload","filter","selectedImage","uploadedImage","find","imageUpload","file","uri","url","imagesToRemove","updatedSelectedImages","map","source","Boolean","editingExists","current","focus","asyncIdsString","join","asyncUploadsString","Object","values","state","keys","getMembers","result","member","user","push","getUsers","users","getWatchers","uniqueUsers","usersArray","additionalTextInputContainerProps","editable","undefined","newHeight","nativeEvent","layout","backgroundColor","borderColor","paddingVertical","quoted_message","borderBottomColor","marginHorizontal","bottom","data","onSelect","queryText","areEqual","prevProps","nextProps","prevAdditionalTextInputProps","prevAsyncUploads","prevDisabled","prevEditing","prevFileUploads","prevGiphyActive","prevImageUploads","prevIsValidMessage","prevMentionedUsers","prevQuotedMessage","prevSending","prevShowMoreOptions","showMoreOptions","prevSuggestions","prevT","t","prevThread","prevThreadList","nextAdditionalTextInputProps","nextAsyncUploads","nextDisabled","nextEditing","nextFileUploads","nextGiphyActive","nextImageUploads","nextIsValidMessage","nextMentionedUsers","nextQuotedMessage","nextSending","nextShowMoreOptions","nextSuggestions","nextT","nextThread","nextThreadList","tEqual","additionalTextInputPropsEven","disabledEqual","editingEqual","imageUploadsEqual","giphyActiveEqual","quotedMessageEqual","sendingEqual","showMoreOptionsEqual","isValidMessageEqual","asyncUploadsEqual","every","key","fileUploadsEqual","mentionedUsersEqual","suggestionsEqual","index","name","threadEqual","text","reply_count","threadListEqual","MemoizedMessageInput","React","memo","MessageInput","ownCapabilities","clearEditingState","clearQuotedMessageState","SendMessageDisallowedIndicator","setGiphyActive","setShowMoreOptions","AutoCompleteSuggestionHeader","AutoCompleteSuggestionItem","sendMessage","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { useCountdown } from './hooks/useCountdown';\n\nimport { useAttachmentPickerContext } from '../../contexts/attachmentPickerContext/AttachmentPickerContext';\nimport {\n ChannelContextValue,\n useChannelContext,\n} from '../../contexts/channelContext/ChannelContext';\nimport {\n MessageInputContextValue,\n useMessageInputContext,\n} from '../../contexts/messageInputContext/MessageInputContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport { useOwnCapabilitiesContext } from '../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';\nimport {\n SuggestionsContextValue,\n useSuggestionsContext,\n} from '../../contexts/suggestionsContext/SuggestionsContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { ThreadContextValue, useThreadContext } from '../../contexts/threadContext/ThreadContext';\nimport {\n TranslationContextValue,\n useTranslationContext,\n} from '../../contexts/translationContext/TranslationContext';\n\nimport type { Asset } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { AttachmentSelectionBar } from '../AttachmentPicker/components/AttachmentSelectionBar';\nimport { AutoCompleteInput } from '../AutoCompleteInput/AutoCompleteInput';\n\nconst styles = StyleSheet.create({\n attachmentSeparator: {\n borderBottomWidth: 1,\n marginBottom: 10,\n },\n autoCompleteInputContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n paddingLeft: 16,\n paddingRight: 16,\n },\n composerContainer: {\n alignItems: 'flex-end',\n flexDirection: 'row',\n },\n container: {\n borderTopWidth: 1,\n padding: 10,\n },\n inputBoxContainer: {\n borderRadius: 20,\n borderWidth: 1,\n flex: 1,\n },\n optionsContainer: {\n flexDirection: 'row',\n paddingBottom: 10,\n paddingRight: 10,\n },\n replyContainer: { paddingBottom: 12, paddingHorizontal: 8 },\n sendButtonContainer: { paddingBottom: 10, paddingLeft: 10 },\n suggestionsListContainer: {\n borderRadius: 10,\n elevation: 3,\n left: 8,\n position: 'absolute',\n right: 8,\n shadowOffset: { height: 1, width: 0 },\n shadowOpacity: 0.15,\n },\n});\n\ntype MessageInputPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChannelContextValue<StreamChatGenerics>, 'disabled' | 'members' | 'watchers'> &\n Pick<\n MessageInputContextValue<StreamChatGenerics>,\n | 'additionalTextInputProps'\n | 'asyncIds'\n | 'asyncUploads'\n | 'cooldownEndsAt'\n | 'CooldownTimer'\n | 'clearEditingState'\n | 'clearQuotedMessageState'\n | 'closeAttachmentPicker'\n | 'editing'\n | 'FileUploadPreview'\n | 'fileUploads'\n | 'giphyActive'\n | 'ImageUploadPreview'\n | 'imageUploads'\n | 'Input'\n | 'inputBoxRef'\n | 'InputButtons'\n | 'InputEditingStateHeader'\n | 'InputGiphySearch'\n | 'InputReplyStateHeader'\n | 'isValidMessage'\n | 'maxNumberOfFiles'\n | 'mentionedUsers'\n | 'numberOfUploads'\n | 'quotedMessage'\n | 'resetInput'\n | 'SendButton'\n | 'sending'\n | 'sendMessageAsync'\n | 'setShowMoreOptions'\n | 'setGiphyActive'\n | 'showMoreOptions'\n | 'ShowThreadMessageInChannelButton'\n | 'removeImage'\n | 'uploadNewImage'\n > &\n Pick<MessagesContextValue<StreamChatGenerics>, 'Reply'> &\n Pick<\n SuggestionsContextValue<StreamChatGenerics>,\n | 'AutoCompleteSuggestionHeader'\n | 'AutoCompleteSuggestionItem'\n | 'AutoCompleteSuggestionList'\n | 'suggestions'\n | 'triggerType'\n > &\n Pick<ThreadContextValue<StreamChatGenerics>, 'thread'> &\n Pick<TranslationContextValue, 't'> & {\n threadList?: boolean;\n };\n\nconst MessageInputWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageInputPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n AutoCompleteSuggestionList,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n disabled,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isValidMessage,\n maxNumberOfFiles,\n members,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeImage,\n Reply,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n ShowThreadMessageInChannelButton,\n suggestions,\n thread,\n threadList,\n triggerType,\n uploadNewImage,\n watchers,\n } = props;\n\n const [height, setHeight] = useState(0);\n\n const {\n theme: {\n colors: { border, grey_whisper, white, white_smoke },\n messageInput: {\n attachmentSelectionBar,\n autoCompleteInputContainer,\n composerContainer,\n container,\n inputBoxContainer,\n optionsContainer,\n replyContainer,\n sendButtonContainer,\n suggestionsListContainer: { container: suggestionListContainer },\n },\n },\n } = useTheme();\n\n const {\n attachmentPickerBottomSheetHeight,\n attachmentSelectionBarHeight,\n bottomInset,\n selectedImages,\n selectedPicker,\n setMaxNumberOfFiles,\n setSelectedImages,\n } = useAttachmentPickerContext();\n\n const { seconds: cooldownRemainingSeconds } = useCountdown(cooldownEndsAt);\n\n /**\n * Mounting and un-mounting logic are un-related in following useEffect.\n * While mounting we want to pass maxNumberOfFiles (which is prop on Channel component)\n * to AttachmentPicker (on OverlayProvider)\n *\n * While un-mounting, we want to close the picker e.g., while navigating away.\n */\n useEffect(() => {\n setMaxNumberOfFiles(maxNumberOfFiles ?? 10);\n\n return closeAttachmentPicker;\n }, []);\n\n const [hasResetImages, setHasResetImages] = useState(false);\n const selectedImagesLength = hasResetImages ? selectedImages.length : 0;\n const imageUploadsLength = hasResetImages ? imageUploads.length : 0;\n const imagesForInput = (!!thread && !!threadList) || (!thread && !threadList);\n\n useEffect(() => {\n setSelectedImages([]);\n if (imageUploads.length) {\n imageUploads.forEach((image) => removeImage(image.id));\n }\n return () => setSelectedImages([]);\n }, []);\n\n useEffect(() => {\n if (hasResetImages === false && imageUploadsLength === 0 && selectedImagesLength === 0) {\n setHasResetImages(true);\n }\n }, [imageUploadsLength, selectedImagesLength]);\n\n useEffect(() => {\n if (imagesForInput === false && imageUploads.length) {\n imageUploads.forEach((image) => removeImage(image.id));\n }\n }, [imagesForInput]);\n\n useEffect(() => {\n if (imagesForInput) {\n if (selectedImagesLength > imageUploadsLength) {\n /** User selected an image in bottom sheet attachment picker */\n const imagesToUpload = selectedImages.filter((selectedImage) => {\n const uploadedImage = imageUploads.find(\n (imageUpload) =>\n imageUpload.file.uri === selectedImage.uri || imageUpload.url === selectedImage.uri,\n );\n return !uploadedImage;\n });\n imagesToUpload.forEach((image) => uploadNewImage(image));\n } else if (selectedImagesLength < imageUploadsLength) {\n /** User de-selected an image in bottom sheet attachment picker */\n const imagesToRemove = imageUploads.filter(\n (imageUpload) =>\n !selectedImages.find(\n (selectedImage) =>\n selectedImage.uri === imageUpload.file.uri || selectedImage.uri === imageUpload.url,\n ),\n );\n imagesToRemove.forEach((image) => removeImage(image.id));\n }\n }\n }, [selectedImagesLength]);\n\n useEffect(() => {\n if (imagesForInput) {\n if (imageUploadsLength < selectedImagesLength) {\n /** User removed some image from seleted images within ImageUploadPreview. */\n const updatedSelectedImages = selectedImages.filter((selectedImage) => {\n const uploadedImage = imageUploads.find(\n (imageUpload) =>\n imageUpload.file.uri === selectedImage.uri || imageUpload.url === selectedImage.uri,\n );\n return uploadedImage;\n });\n setSelectedImages(updatedSelectedImages);\n } else if (imageUploadsLength > selectedImagesLength) {\n /**\n * User is editing some message which contains image attachments OR\n * image attachment is added from custom image picker (other than the default bottomsheet image picker)\n * using `uploadNewImage` function from `MessageInputContext`.\n **/\n setSelectedImages(\n imageUploads\n .map((imageUpload) => ({\n height: imageUpload.file.height,\n source: imageUpload.file.source,\n uri: imageUpload.url || imageUpload.file.uri,\n width: imageUpload.file.width,\n }))\n .filter(Boolean) as Asset[],\n );\n }\n }\n }, [imageUploadsLength]);\n\n const editingExists = !!editing;\n useEffect(() => {\n if (editing && inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n\n /**\n * Make sure to test `initialValue` functionality, if you are modifying following condition.\n *\n * We have the following condition, to make sure - when user comes out of \"editing message\" state,\n * we wipe out all the state around message input such as text, mentioned users, image uploads etc.\n * But it also means, this condition will be fired up on first render, which may result in clearing\n * the initial value set on input box, through the prop - `initialValue`.\n * This prop generally gets used for the case of draft message functionality.\n */\n if (\n !editing &&\n (giphyActive ||\n fileUploads.length > 0 ||\n mentionedUsers.length > 0 ||\n imageUploads.length > 0 ||\n numberOfUploads > 0)\n ) {\n resetInput();\n }\n }, [editingExists]);\n\n const asyncIdsString = asyncIds.join();\n const asyncUploadsString = Object.values(asyncUploads)\n .map(({ state, url }) => `${state}${url}`)\n .join();\n useEffect(() => {\n if (Object.keys(asyncUploads).length) {\n /**\n * When successful image upload response occurs after hitting send,\n * send a follow up message with the image\n */\n sending.current = true;\n asyncIds.forEach((id) => sendMessageAsync(id));\n sending.current = false;\n }\n }, [asyncIdsString, asyncUploadsString, sendMessageAsync]);\n\n const getMembers = () => {\n const result: UserResponse<StreamChatGenerics>[] = [];\n if (members && Object.values(members).length) {\n Object.values(members).forEach((member) => {\n if (member.user) {\n result.push(member.user);\n }\n });\n }\n\n return result;\n };\n\n const getUsers = () => {\n const users = [...getMembers(), ...getWatchers()];\n\n // make sure we don't list users twice\n const uniqueUsers: { [key: string]: UserResponse<StreamChatGenerics> } = {};\n for (const user of users) {\n if (user && !uniqueUsers[user.id]) {\n uniqueUsers[user.id] = user;\n }\n }\n const usersArray = Object.values(uniqueUsers);\n\n return usersArray;\n };\n\n const getWatchers = () => {\n const result: UserResponse<StreamChatGenerics>[] = [];\n if (watchers && Object.values(watchers).length) {\n result.push(...Object.values(watchers));\n }\n\n return result;\n };\n\n const additionalTextInputContainerProps = {\n editable: disabled ? false : undefined,\n ...additionalTextInputProps,\n };\n\n return (\n <>\n <View\n onLayout={({\n nativeEvent: {\n layout: { height: newHeight },\n },\n }) => setHeight(newHeight)}\n style={[styles.container, { backgroundColor: white, borderColor: border }, container]}\n >\n {editing && <InputEditingStateHeader />}\n {quotedMessage && <InputReplyStateHeader />}\n <View style={[styles.composerContainer, composerContainer]}>\n {Input ? (\n <Input\n additionalTextInputProps={additionalTextInputContainerProps}\n getUsers={getUsers}\n />\n ) : (\n <>\n <View style={[styles.optionsContainer, optionsContainer]}>\n {InputButtons && <InputButtons />}\n </View>\n <View\n style={[\n styles.inputBoxContainer,\n {\n borderColor: grey_whisper,\n paddingVertical: giphyActive ? 8 : 12,\n },\n inputBoxContainer,\n ]}\n >\n {((typeof editing !== 'boolean' && editing?.quoted_message) || quotedMessage) && (\n <View style={[styles.replyContainer, replyContainer]}>\n <Reply />\n </View>\n )}\n {imageUploads.length ? <ImageUploadPreview /> : null}\n {imageUploads.length && fileUploads.length ? (\n <View\n style={[\n styles.attachmentSeparator,\n {\n borderBottomColor: grey_whisper,\n marginHorizontal: giphyActive ? 8 : 12,\n },\n ]}\n />\n ) : null}\n {fileUploads.length ? <FileUploadPreview /> : null}\n {giphyActive ? (\n <InputGiphySearch />\n ) : (\n <View style={[styles.autoCompleteInputContainer, autoCompleteInputContainer]}>\n <AutoCompleteInput<StreamChatGenerics>\n additionalTextInputProps={additionalTextInputProps}\n cooldownActive={!!cooldownRemainingSeconds}\n />\n </View>\n )}\n </View>\n <View style={[styles.sendButtonContainer, sendButtonContainer]}>\n {cooldownRemainingSeconds ? (\n <CooldownTimer seconds={cooldownRemainingSeconds} />\n ) : (\n <SendButton disabled={disabled || sending.current || !isValidMessage()} />\n )}\n </View>\n </>\n )}\n </View>\n <ShowThreadMessageInChannelButton threadList={threadList} />\n </View>\n\n {triggerType && suggestions ? (\n <View\n style={[\n suggestionListContainer,\n styles.suggestionsListContainer,\n { backgroundColor: white, bottom: height },\n ]}\n >\n <AutoCompleteSuggestionList\n active={!!suggestions}\n data={suggestions.data}\n onSelect={suggestions.onSelect}\n queryText={suggestions.queryText}\n triggerType={triggerType}\n />\n </View>\n ) : null}\n {selectedPicker && (\n <View\n style={[\n {\n backgroundColor: white_smoke,\n height:\n (attachmentPickerBottomSheetHeight\n ? attachmentPickerBottomSheetHeight + (attachmentSelectionBarHeight ?? 52)\n : 360) - bottomInset,\n },\n attachmentSelectionBar,\n ]}\n >\n <AttachmentSelectionBar />\n </View>\n )}\n </>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageInputPropsWithContext<StreamChatGenerics>,\n nextProps: MessageInputPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTextInputProps: prevAdditionalTextInputProps,\n asyncUploads: prevAsyncUploads,\n disabled: prevDisabled,\n editing: prevEditing,\n fileUploads: prevFileUploads,\n giphyActive: prevGiphyActive,\n imageUploads: prevImageUploads,\n isValidMessage: prevIsValidMessage,\n mentionedUsers: prevMentionedUsers,\n quotedMessage: prevQuotedMessage,\n sending: prevSending,\n showMoreOptions: prevShowMoreOptions,\n suggestions: prevSuggestions,\n t: prevT,\n thread: prevThread,\n threadList: prevThreadList,\n } = prevProps;\n const {\n additionalTextInputProps: nextAdditionalTextInputProps,\n asyncUploads: nextAsyncUploads,\n disabled: nextDisabled,\n editing: nextEditing,\n fileUploads: nextFileUploads,\n giphyActive: nextGiphyActive,\n imageUploads: nextImageUploads,\n isValidMessage: nextIsValidMessage,\n mentionedUsers: nextMentionedUsers,\n quotedMessage: nextQuotedMessage,\n sending: nextSending,\n showMoreOptions: nextShowMoreOptions,\n suggestions: nextSuggestions,\n t: nextT,\n thread: nextThread,\n threadList: nextThreadList,\n } = nextProps;\n\n const tEqual = prevT === nextT;\n if (!tEqual) return false;\n\n const additionalTextInputPropsEven =\n prevAdditionalTextInputProps === nextAdditionalTextInputProps;\n if (!additionalTextInputPropsEven) return false;\n\n const disabledEqual = prevDisabled === nextDisabled;\n if (!disabledEqual) return false;\n\n const editingEqual = !!prevEditing === !!nextEditing;\n if (!editingEqual) return false;\n\n const imageUploadsEqual = prevImageUploads.length === nextImageUploads.length;\n if (!imageUploadsEqual) return false;\n\n const giphyActiveEqual = prevGiphyActive === nextGiphyActive;\n if (!giphyActiveEqual) return false;\n\n const quotedMessageEqual =\n !!prevQuotedMessage &&\n !!nextQuotedMessage &&\n typeof prevQuotedMessage !== 'boolean' &&\n typeof nextQuotedMessage !== 'boolean'\n ? prevQuotedMessage.id === nextQuotedMessage.id\n : !!prevQuotedMessage === !!nextQuotedMessage;\n if (!quotedMessageEqual) return false;\n\n const sendingEqual = prevSending.current === nextSending.current;\n if (!sendingEqual) return false;\n\n const showMoreOptionsEqual = prevShowMoreOptions === nextShowMoreOptions;\n if (!showMoreOptionsEqual) return false;\n\n const isValidMessageEqual = prevIsValidMessage() === nextIsValidMessage();\n if (!isValidMessageEqual) return false;\n\n const asyncUploadsEqual = Object.keys(prevAsyncUploads).every(\n (key) =>\n prevAsyncUploads[key].state === nextAsyncUploads[key].state &&\n prevAsyncUploads[key].url === nextAsyncUploads[key].url,\n );\n if (!asyncUploadsEqual) return false;\n\n const fileUploadsEqual = prevFileUploads.length === nextFileUploads.length;\n if (!fileUploadsEqual) return false;\n\n const mentionedUsersEqual = prevMentionedUsers.length === nextMentionedUsers.length;\n if (!mentionedUsersEqual) return false;\n\n const suggestionsEqual =\n !!prevSuggestions?.data && !!nextSuggestions?.data\n ? prevSuggestions.data.length === nextSuggestions.data.length &&\n prevSuggestions.data.every(({ name }, index) => name === nextSuggestions.data[index].name)\n : !!prevSuggestions === !!nextSuggestions;\n if (!suggestionsEqual) return false;\n\n const threadEqual =\n prevThread?.id === nextThread?.id &&\n prevThread?.text === nextThread?.text &&\n prevThread?.reply_count === nextThread?.reply_count;\n if (!threadEqual) return false;\n\n const threadListEqual = prevThreadList === nextThreadList;\n if (!threadListEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageInput = React.memo(\n MessageInputWithContext,\n areEqual,\n) as typeof MessageInputWithContext;\n\nexport type MessageInputProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageInputPropsWithContext<StreamChatGenerics>>;\n\n/**\n * UI Component for message input\n * It's a consumer of\n * [Channel Context](https://getstream.github.io/stream-chat-react-native/v3/#channelcontext),\n * [Chat Context](https://getstream.github.io/stream-chat-react-native/v3/#chatcontext),\n * [MessageInput Context](https://getstream.github.io/stream-chat-react-native/v3/#messageinputcontext),\n * [Suggestions Context](https://getstream.github.io/stream-chat-react-native/v3/#suggestionscontext), and\n * [Translation Context](https://getstream.github.io/stream-chat-react-native/v3/#translationcontext)\n */\nexport const MessageInput = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageInputProps<StreamChatGenerics>,\n) => {\n const ownCapabilities = useOwnCapabilitiesContext();\n\n const { disabled = false, members, watchers } = useChannelContext<StreamChatGenerics>();\n\n const {\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n clearEditingState,\n clearQuotedMessageState,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isValidMessage,\n maxNumberOfFiles,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeImage,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n SendMessageDisallowedIndicator,\n setGiphyActive,\n setShowMoreOptions,\n showMoreOptions,\n ShowThreadMessageInChannelButton,\n uploadNewImage,\n } = useMessageInputContext<StreamChatGenerics>();\n\n const { Reply } = useMessagesContext<StreamChatGenerics>();\n\n const {\n AutoCompleteSuggestionHeader,\n AutoCompleteSuggestionItem,\n AutoCompleteSuggestionList,\n suggestions,\n triggerType,\n } = useSuggestionsContext<StreamChatGenerics>();\n\n const { thread } = useThreadContext<StreamChatGenerics>();\n\n const { t } = useTranslationContext();\n\n if (!ownCapabilities.sendMessage && SendMessageDisallowedIndicator) {\n return <SendMessageDisallowedIndicator />;\n }\n\n return (\n <MemoizedMessageInput\n {...{\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n AutoCompleteSuggestionHeader,\n AutoCompleteSuggestionItem,\n AutoCompleteSuggestionList,\n clearEditingState,\n clearQuotedMessageState,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n disabled,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isValidMessage,\n maxNumberOfFiles,\n members,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeImage,\n Reply,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n setGiphyActive,\n setShowMoreOptions,\n showMoreOptions,\n ShowThreadMessageInChannelButton,\n suggestions,\n t,\n thread,\n triggerType,\n uploadNewImage,\n watchers,\n }}\n {...props}\n />\n );\n};\n\nMessageInput.displayName = 'MessageInput{messageInput}';\n"]}
1
+ {"version":3,"sources":["MessageInput.tsx"],"names":["styles","StyleSheet","create","attachmentSeparator","borderBottomWidth","marginBottom","autoCompleteInputContainer","alignItems","flexDirection","paddingLeft","paddingRight","composerContainer","container","borderTopWidth","padding","inputBoxContainer","borderRadius","borderWidth","flex","optionsContainer","paddingBottom","replyContainer","paddingHorizontal","sendButtonContainer","suggestionsListContainer","elevation","left","position","right","shadowOffset","height","width","shadowOpacity","MessageInputWithContext","props","additionalTextInputProps","asyncIds","asyncUploads","AutoCompleteSuggestionList","closeAttachmentPicker","cooldownEndsAt","CooldownTimer","disabled","editing","FileUploadPreview","fileUploads","giphyActive","ImageUploadPreview","imageUploads","Input","inputBoxRef","InputButtons","InputEditingStateHeader","InputGiphySearch","InputReplyStateHeader","isValidMessage","maxNumberOfFiles","members","mentionedUsers","numberOfUploads","quotedMessage","removeFile","removeImage","Reply","resetInput","SendButton","sending","sendMessageAsync","ShowThreadMessageInChannelButton","suggestions","thread","threadList","triggerType","uploadNewFile","uploadNewImage","watchers","setHeight","theme","colors","border","grey_whisper","white","white_smoke","messageInput","attachmentSelectionBar","suggestionListContainer","attachmentPickerBottomSheetHeight","attachmentSelectionBarHeight","bottomInset","selectedFiles","selectedImages","selectedPicker","setMaxNumberOfFiles","setSelectedFiles","setSelectedImages","cooldownRemainingSeconds","seconds","hasResetImages","setHasResetImages","hasResetFiles","setHasResetFiles","selectedImagesLength","length","imageUploadsLength","selectedFilesLength","fileUploadsLength","imagesForInput","forEach","image","id","file","uploadImagesHandler","imagesToUpload","filter","selectedImage","uploadedImage","find","imageUpload","uri","url","removeImagesHandler","imagesToRemove","filesToUpload","selectedFile","uploadedFile","fileUpload","filesToRemove","updatedSelectedImages","map","source","Boolean","updatedSelectedFiles","duration","name","size","type","editingExists","current","focus","asyncIdsString","join","asyncUploadsString","Object","values","state","keys","getMembers","result","member","user","push","getUsers","users","getWatchers","uniqueUsers","usersArray","additionalTextInputContainerProps","editable","undefined","newHeight","nativeEvent","layout","backgroundColor","borderColor","paddingVertical","quoted_message","borderBottomColor","marginHorizontal","bottom","data","onSelect","queryText","areEqual","prevProps","nextProps","prevAdditionalTextInputProps","prevAsyncUploads","prevDisabled","prevEditing","prevFileUploads","prevGiphyActive","prevImageUploads","prevIsValidMessage","prevMentionedUsers","prevQuotedMessage","prevSending","prevShowMoreOptions","showMoreOptions","prevSuggestions","prevT","t","prevThread","prevThreadList","nextAdditionalTextInputProps","nextAsyncUploads","nextDisabled","nextEditing","nextFileUploads","nextGiphyActive","nextImageUploads","nextIsValidMessage","nextMentionedUsers","nextQuotedMessage","nextSending","nextShowMoreOptions","nextSuggestions","nextT","nextThread","nextThreadList","tEqual","additionalTextInputPropsEven","disabledEqual","editingEqual","imageUploadsEqual","giphyActiveEqual","quotedMessageEqual","sendingEqual","showMoreOptionsEqual","isValidMessageEqual","asyncUploadsEqual","every","key","fileUploadsEqual","mentionedUsersEqual","suggestionsEqual","index","threadEqual","text","reply_count","threadListEqual","MemoizedMessageInput","React","memo","MessageInput","ownCapabilities","clearEditingState","clearQuotedMessageState","SendMessageDisallowedIndicator","setGiphyActive","setShowMoreOptions","AutoCompleteSuggestionHeader","AutoCompleteSuggestionItem","sendMessage","displayName"],"mappings":"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","sourcesContent":["import React, { useEffect, useState } from 'react';\nimport { StyleSheet, View } from 'react-native';\n\nimport type { UserResponse } from 'stream-chat';\n\nimport { useCountdown } from './hooks/useCountdown';\n\nimport { useAttachmentPickerContext } from '../../contexts/attachmentPickerContext/AttachmentPickerContext';\nimport {\n ChannelContextValue,\n useChannelContext,\n} from '../../contexts/channelContext/ChannelContext';\nimport {\n MessageInputContextValue,\n useMessageInputContext,\n} from '../../contexts/messageInputContext/MessageInputContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport { useOwnCapabilitiesContext } from '../../contexts/ownCapabilitiesContext/OwnCapabilitiesContext';\nimport {\n SuggestionsContextValue,\n useSuggestionsContext,\n} from '../../contexts/suggestionsContext/SuggestionsContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport { ThreadContextValue, useThreadContext } from '../../contexts/threadContext/ThreadContext';\nimport {\n TranslationContextValue,\n useTranslationContext,\n} from '../../contexts/translationContext/TranslationContext';\n\nimport type { Asset, DefaultStreamChatGenerics } from '../../types/types';\nimport { AttachmentSelectionBar } from '../AttachmentPicker/components/AttachmentSelectionBar';\nimport { AutoCompleteInput } from '../AutoCompleteInput/AutoCompleteInput';\n\nconst styles = StyleSheet.create({\n attachmentSeparator: {\n borderBottomWidth: 1,\n marginBottom: 10,\n },\n autoCompleteInputContainer: {\n alignItems: 'center',\n flexDirection: 'row',\n paddingLeft: 16,\n paddingRight: 16,\n },\n composerContainer: {\n alignItems: 'flex-end',\n flexDirection: 'row',\n },\n container: {\n borderTopWidth: 1,\n padding: 10,\n },\n inputBoxContainer: {\n borderRadius: 20,\n borderWidth: 1,\n flex: 1,\n },\n optionsContainer: {\n flexDirection: 'row',\n paddingBottom: 10,\n paddingRight: 10,\n },\n replyContainer: { paddingBottom: 12, paddingHorizontal: 8 },\n sendButtonContainer: { paddingBottom: 10, paddingLeft: 10 },\n suggestionsListContainer: {\n borderRadius: 10,\n elevation: 3,\n left: 8,\n position: 'absolute',\n right: 8,\n shadowOffset: { height: 1, width: 0 },\n shadowOpacity: 0.15,\n },\n});\n\ntype MessageInputPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<ChannelContextValue<StreamChatGenerics>, 'disabled' | 'members' | 'watchers'> &\n Pick<\n MessageInputContextValue<StreamChatGenerics>,\n | 'additionalTextInputProps'\n | 'asyncIds'\n | 'asyncUploads'\n | 'cooldownEndsAt'\n | 'CooldownTimer'\n | 'clearEditingState'\n | 'clearQuotedMessageState'\n | 'closeAttachmentPicker'\n | 'editing'\n | 'FileUploadPreview'\n | 'fileUploads'\n | 'giphyActive'\n | 'ImageUploadPreview'\n | 'imageUploads'\n | 'Input'\n | 'inputBoxRef'\n | 'InputButtons'\n | 'InputEditingStateHeader'\n | 'InputGiphySearch'\n | 'InputReplyStateHeader'\n | 'isValidMessage'\n | 'maxNumberOfFiles'\n | 'mentionedUsers'\n | 'numberOfUploads'\n | 'quotedMessage'\n | 'resetInput'\n | 'SendButton'\n | 'sending'\n | 'sendMessageAsync'\n | 'setShowMoreOptions'\n | 'setGiphyActive'\n | 'showMoreOptions'\n | 'ShowThreadMessageInChannelButton'\n | 'removeFile'\n | 'removeImage'\n | 'uploadNewFile'\n | 'uploadNewImage'\n > &\n Pick<MessagesContextValue<StreamChatGenerics>, 'Reply'> &\n Pick<\n SuggestionsContextValue<StreamChatGenerics>,\n | 'AutoCompleteSuggestionHeader'\n | 'AutoCompleteSuggestionItem'\n | 'AutoCompleteSuggestionList'\n | 'suggestions'\n | 'triggerType'\n > &\n Pick<ThreadContextValue<StreamChatGenerics>, 'thread'> &\n Pick<TranslationContextValue, 't'> & {\n threadList?: boolean;\n };\n\nconst MessageInputWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageInputPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n AutoCompleteSuggestionList,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n disabled,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isValidMessage,\n maxNumberOfFiles,\n members,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeFile,\n removeImage,\n Reply,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n ShowThreadMessageInChannelButton,\n suggestions,\n thread,\n threadList,\n triggerType,\n uploadNewFile,\n uploadNewImage,\n watchers,\n } = props;\n\n const [height, setHeight] = useState(0);\n\n const {\n theme: {\n colors: { border, grey_whisper, white, white_smoke },\n messageInput: {\n attachmentSelectionBar,\n autoCompleteInputContainer,\n composerContainer,\n container,\n inputBoxContainer,\n optionsContainer,\n replyContainer,\n sendButtonContainer,\n suggestionsListContainer: { container: suggestionListContainer },\n },\n },\n } = useTheme();\n\n const {\n attachmentPickerBottomSheetHeight,\n attachmentSelectionBarHeight,\n bottomInset,\n selectedFiles,\n selectedImages,\n selectedPicker,\n setMaxNumberOfFiles,\n setSelectedFiles,\n setSelectedImages,\n } = useAttachmentPickerContext();\n\n const { seconds: cooldownRemainingSeconds } = useCountdown(cooldownEndsAt);\n\n /**\n * Mounting and un-mounting logic are un-related in following useEffect.\n * While mounting we want to pass maxNumberOfFiles (which is prop on Channel component)\n * to AttachmentPicker (on OverlayProvider)\n *\n * While un-mounting, we want to close the picker e.g., while navigating away.\n */\n useEffect(() => {\n setMaxNumberOfFiles(maxNumberOfFiles ?? 10);\n\n return closeAttachmentPicker;\n }, []);\n\n const [hasResetImages, setHasResetImages] = useState(false);\n const [hasResetFiles, setHasResetFiles] = useState(false);\n const selectedImagesLength = hasResetImages ? selectedImages.length : 0;\n const imageUploadsLength = hasResetImages ? imageUploads.length : 0;\n const selectedFilesLength = hasResetFiles ? selectedFiles.length : 0;\n const fileUploadsLength = hasResetFiles ? fileUploads.length : 0;\n const imagesForInput = (!!thread && !!threadList) || (!thread && !threadList);\n\n useEffect(() => {\n setSelectedImages([]);\n if (imageUploads.length) {\n imageUploads.forEach((image) => removeImage(image.id));\n }\n return () => setSelectedImages([]);\n }, []);\n\n useEffect(() => {\n setSelectedFiles([]);\n if (fileUploads.length) {\n fileUploads.forEach((file) => removeFile(file.id));\n }\n return () => setSelectedFiles([]);\n }, []);\n\n useEffect(() => {\n if (hasResetImages === false && imageUploadsLength === 0 && selectedImagesLength === 0) {\n setHasResetImages(true);\n }\n }, [imageUploadsLength, selectedImagesLength]);\n\n useEffect(() => {\n if (hasResetFiles === false && fileUploadsLength === 0 && selectedFilesLength === 0) {\n setHasResetFiles(true);\n }\n }, [fileUploadsLength, selectedFilesLength]);\n\n useEffect(() => {\n if (imagesForInput === false && imageUploads.length) {\n imageUploads.forEach((image) => removeImage(image.id));\n }\n }, [imagesForInput]);\n\n const uploadImagesHandler = () => {\n const imagesToUpload = selectedImages.filter((selectedImage) => {\n const uploadedImage = imageUploads.find(\n (imageUpload) =>\n imageUpload.file.uri === selectedImage.uri || imageUpload.url === selectedImage.uri,\n );\n return !uploadedImage;\n });\n imagesToUpload.forEach((image) => uploadNewImage(image));\n };\n\n const removeImagesHandler = () => {\n const imagesToRemove = imageUploads.filter(\n (imageUpload) =>\n !selectedImages.find(\n (selectedImage) =>\n selectedImage.uri === imageUpload.file.uri || selectedImage.uri === imageUpload.url,\n ),\n );\n imagesToRemove.forEach((image) => removeImage(image.id));\n };\n\n useEffect(() => {\n if (imagesForInput) {\n if (selectedImagesLength > imageUploadsLength) {\n /** User selected an image in bottom sheet attachment picker */\n uploadImagesHandler();\n } else {\n /** User de-selected an image in bottom sheet attachment picker */\n removeImagesHandler();\n }\n }\n }, [selectedImagesLength]);\n\n useEffect(() => {\n if (selectedFilesLength > fileUploadsLength) {\n /** User selected a video in bottom sheet attachment picker */\n const filesToUpload = selectedFiles.filter((selectedFile) => {\n const uploadedFile = fileUploads.find(\n (fileUpload) =>\n fileUpload.file.uri === selectedFile.uri || fileUpload.url === selectedFile.uri,\n );\n return !uploadedFile;\n });\n filesToUpload.forEach((file) => uploadNewFile(file));\n } else {\n /** User de-selected a video in bottom sheet attachment picker */\n const filesToRemove = fileUploads.filter(\n (fileUpload) =>\n !selectedFiles.find(\n (selectedFile) =>\n selectedFile.uri === fileUpload.file.uri || selectedFile.uri === fileUpload.url,\n ),\n );\n filesToRemove.forEach((file) => removeFile(file.id));\n }\n }, [selectedFilesLength]);\n\n useEffect(() => {\n if (imagesForInput) {\n if (imageUploadsLength < selectedImagesLength) {\n /** User removed some image from seleted images within ImageUploadPreview. */\n const updatedSelectedImages = selectedImages.filter((selectedImage) => {\n const uploadedImage = imageUploads.find(\n (imageUpload) =>\n imageUpload.file.uri === selectedImage.uri || imageUpload.url === selectedImage.uri,\n );\n return uploadedImage;\n });\n setSelectedImages(updatedSelectedImages);\n } else if (imageUploadsLength > selectedImagesLength) {\n /**\n * User is editing some message which contains image attachments OR\n * image attachment is added from custom image picker (other than the default bottomsheet image picker)\n * using `uploadNewImage` function from `MessageInputContext`.\n **/\n setSelectedImages(\n imageUploads\n .map((imageUpload) => ({\n height: imageUpload.file.height,\n source: imageUpload.file.source,\n uri: imageUpload.url || imageUpload.file.uri,\n width: imageUpload.file.width,\n }))\n .filter(Boolean) as Asset[],\n );\n }\n }\n }, [imageUploadsLength]);\n\n useEffect(() => {\n if (fileUploadsLength < selectedFilesLength) {\n /** User removed some video from seleted files within ImageUploadPreview. */\n const updatedSelectedFiles = selectedFiles.filter((selectedFile) => {\n const uploadedFile = fileUploads.find(\n (fileUpload) =>\n fileUpload.file.uri === selectedFile.uri || fileUpload.url === selectedFile.uri,\n );\n return uploadedFile;\n });\n setSelectedFiles(updatedSelectedFiles);\n } else if (fileUploadsLength > selectedFilesLength) {\n /**\n * User is editing some message which contains video attachments OR\n * video attachment is added from custom image picker (other than the default bottomsheet image picker)\n * using `uploadNewFile` function from `MessageInputContext`.\n **/\n setSelectedFiles(\n fileUploads.map((fileUpload) => ({\n duration: fileUpload.file.duration,\n name: fileUpload.file.name,\n size: fileUpload.file.size,\n type: fileUpload.file.type,\n uri: fileUpload.file.uri,\n })),\n );\n }\n }, [fileUploadsLength]);\n\n const editingExists = !!editing;\n useEffect(() => {\n if (editing && inputBoxRef.current) {\n inputBoxRef.current.focus();\n }\n\n /**\n * Make sure to test `initialValue` functionality, if you are modifying following condition.\n *\n * We have the following condition, to make sure - when user comes out of \"editing message\" state,\n * we wipe out all the state around message input such as text, mentioned users, image uploads etc.\n * But it also means, this condition will be fired up on first render, which may result in clearing\n * the initial value set on input box, through the prop - `initialValue`.\n * This prop generally gets used for the case of draft message functionality.\n */\n if (\n !editing &&\n (giphyActive ||\n fileUploads.length > 0 ||\n mentionedUsers.length > 0 ||\n imageUploads.length > 0 ||\n numberOfUploads > 0)\n ) {\n resetInput();\n }\n }, [editingExists]);\n\n const asyncIdsString = asyncIds.join();\n const asyncUploadsString = Object.values(asyncUploads)\n .map(({ state, url }) => `${state}${url}`)\n .join();\n useEffect(() => {\n if (Object.keys(asyncUploads).length) {\n /**\n * When successful image upload response occurs after hitting send,\n * send a follow up message with the image\n */\n sending.current = true;\n asyncIds.forEach((id) => sendMessageAsync(id));\n sending.current = false;\n }\n }, [asyncIdsString, asyncUploadsString, sendMessageAsync]);\n\n const getMembers = () => {\n const result: UserResponse<StreamChatGenerics>[] = [];\n if (members && Object.values(members).length) {\n Object.values(members).forEach((member) => {\n if (member.user) {\n result.push(member.user);\n }\n });\n }\n\n return result;\n };\n\n const getUsers = () => {\n const users = [...getMembers(), ...getWatchers()];\n\n // make sure we don't list users twice\n const uniqueUsers: { [key: string]: UserResponse<StreamChatGenerics> } = {};\n for (const user of users) {\n if (user && !uniqueUsers[user.id]) {\n uniqueUsers[user.id] = user;\n }\n }\n const usersArray = Object.values(uniqueUsers);\n\n return usersArray;\n };\n\n const getWatchers = () => {\n const result: UserResponse<StreamChatGenerics>[] = [];\n if (watchers && Object.values(watchers).length) {\n result.push(...Object.values(watchers));\n }\n\n return result;\n };\n\n const additionalTextInputContainerProps = {\n editable: disabled ? false : undefined,\n ...additionalTextInputProps,\n };\n\n return (\n <>\n <View\n onLayout={({\n nativeEvent: {\n layout: { height: newHeight },\n },\n }) => setHeight(newHeight)}\n style={[styles.container, { backgroundColor: white, borderColor: border }, container]}\n >\n {editing && <InputEditingStateHeader />}\n {quotedMessage && <InputReplyStateHeader />}\n <View style={[styles.composerContainer, composerContainer]}>\n {Input ? (\n <Input\n additionalTextInputProps={additionalTextInputContainerProps}\n getUsers={getUsers}\n />\n ) : (\n <>\n <View style={[styles.optionsContainer, optionsContainer]}>\n {InputButtons && <InputButtons />}\n </View>\n <View\n style={[\n styles.inputBoxContainer,\n {\n borderColor: grey_whisper,\n paddingVertical: giphyActive ? 8 : 12,\n },\n inputBoxContainer,\n ]}\n >\n {((typeof editing !== 'boolean' && editing?.quoted_message) || quotedMessage) && (\n <View style={[styles.replyContainer, replyContainer]}>\n <Reply />\n </View>\n )}\n {imageUploads.length ? <ImageUploadPreview /> : null}\n {imageUploads.length && fileUploads.length ? (\n <View\n style={[\n styles.attachmentSeparator,\n {\n borderBottomColor: grey_whisper,\n marginHorizontal: giphyActive ? 8 : 12,\n },\n ]}\n />\n ) : null}\n {fileUploads.length ? <FileUploadPreview /> : null}\n {giphyActive ? (\n <InputGiphySearch />\n ) : (\n <View style={[styles.autoCompleteInputContainer, autoCompleteInputContainer]}>\n <AutoCompleteInput<StreamChatGenerics>\n additionalTextInputProps={additionalTextInputProps}\n cooldownActive={!!cooldownRemainingSeconds}\n />\n </View>\n )}\n </View>\n <View style={[styles.sendButtonContainer, sendButtonContainer]}>\n {cooldownRemainingSeconds ? (\n <CooldownTimer seconds={cooldownRemainingSeconds} />\n ) : (\n <SendButton disabled={disabled || sending.current || !isValidMessage()} />\n )}\n </View>\n </>\n )}\n </View>\n <ShowThreadMessageInChannelButton threadList={threadList} />\n </View>\n\n {triggerType && suggestions ? (\n <View\n style={[\n suggestionListContainer,\n styles.suggestionsListContainer,\n { backgroundColor: white, bottom: height },\n ]}\n >\n <AutoCompleteSuggestionList\n active={!!suggestions}\n data={suggestions.data}\n onSelect={suggestions.onSelect}\n queryText={suggestions.queryText}\n triggerType={triggerType}\n />\n </View>\n ) : null}\n {selectedPicker && (\n <View\n style={[\n {\n backgroundColor: white_smoke,\n height:\n (attachmentPickerBottomSheetHeight\n ? attachmentPickerBottomSheetHeight + (attachmentSelectionBarHeight ?? 52)\n : 360) - bottomInset,\n },\n attachmentSelectionBar,\n ]}\n >\n <AttachmentSelectionBar />\n </View>\n )}\n </>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: MessageInputPropsWithContext<StreamChatGenerics>,\n nextProps: MessageInputPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n additionalTextInputProps: prevAdditionalTextInputProps,\n asyncUploads: prevAsyncUploads,\n disabled: prevDisabled,\n editing: prevEditing,\n fileUploads: prevFileUploads,\n giphyActive: prevGiphyActive,\n imageUploads: prevImageUploads,\n isValidMessage: prevIsValidMessage,\n mentionedUsers: prevMentionedUsers,\n quotedMessage: prevQuotedMessage,\n sending: prevSending,\n showMoreOptions: prevShowMoreOptions,\n suggestions: prevSuggestions,\n t: prevT,\n thread: prevThread,\n threadList: prevThreadList,\n } = prevProps;\n const {\n additionalTextInputProps: nextAdditionalTextInputProps,\n asyncUploads: nextAsyncUploads,\n disabled: nextDisabled,\n editing: nextEditing,\n fileUploads: nextFileUploads,\n giphyActive: nextGiphyActive,\n imageUploads: nextImageUploads,\n isValidMessage: nextIsValidMessage,\n mentionedUsers: nextMentionedUsers,\n quotedMessage: nextQuotedMessage,\n sending: nextSending,\n showMoreOptions: nextShowMoreOptions,\n suggestions: nextSuggestions,\n t: nextT,\n thread: nextThread,\n threadList: nextThreadList,\n } = nextProps;\n\n const tEqual = prevT === nextT;\n if (!tEqual) return false;\n\n const additionalTextInputPropsEven =\n prevAdditionalTextInputProps === nextAdditionalTextInputProps;\n if (!additionalTextInputPropsEven) return false;\n\n const disabledEqual = prevDisabled === nextDisabled;\n if (!disabledEqual) return false;\n\n const editingEqual = !!prevEditing === !!nextEditing;\n if (!editingEqual) return false;\n\n const imageUploadsEqual = prevImageUploads.length === nextImageUploads.length;\n if (!imageUploadsEqual) return false;\n\n const giphyActiveEqual = prevGiphyActive === nextGiphyActive;\n if (!giphyActiveEqual) return false;\n\n const quotedMessageEqual =\n !!prevQuotedMessage &&\n !!nextQuotedMessage &&\n typeof prevQuotedMessage !== 'boolean' &&\n typeof nextQuotedMessage !== 'boolean'\n ? prevQuotedMessage.id === nextQuotedMessage.id\n : !!prevQuotedMessage === !!nextQuotedMessage;\n if (!quotedMessageEqual) return false;\n\n const sendingEqual = prevSending.current === nextSending.current;\n if (!sendingEqual) return false;\n\n const showMoreOptionsEqual = prevShowMoreOptions === nextShowMoreOptions;\n if (!showMoreOptionsEqual) return false;\n\n const isValidMessageEqual = prevIsValidMessage() === nextIsValidMessage();\n if (!isValidMessageEqual) return false;\n\n const asyncUploadsEqual = Object.keys(prevAsyncUploads).every(\n (key) =>\n prevAsyncUploads[key].state === nextAsyncUploads[key].state &&\n prevAsyncUploads[key].url === nextAsyncUploads[key].url,\n );\n if (!asyncUploadsEqual) return false;\n\n const fileUploadsEqual = prevFileUploads.length === nextFileUploads.length;\n if (!fileUploadsEqual) return false;\n\n const mentionedUsersEqual = prevMentionedUsers.length === nextMentionedUsers.length;\n if (!mentionedUsersEqual) return false;\n\n const suggestionsEqual =\n !!prevSuggestions?.data && !!nextSuggestions?.data\n ? prevSuggestions.data.length === nextSuggestions.data.length &&\n prevSuggestions.data.every(({ name }, index) => name === nextSuggestions.data[index].name)\n : !!prevSuggestions === !!nextSuggestions;\n if (!suggestionsEqual) return false;\n\n const threadEqual =\n prevThread?.id === nextThread?.id &&\n prevThread?.text === nextThread?.text &&\n prevThread?.reply_count === nextThread?.reply_count;\n if (!threadEqual) return false;\n\n const threadListEqual = prevThreadList === nextThreadList;\n if (!threadListEqual) return false;\n\n return true;\n};\n\nconst MemoizedMessageInput = React.memo(\n MessageInputWithContext,\n areEqual,\n) as typeof MessageInputWithContext;\n\nexport type MessageInputProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<MessageInputPropsWithContext<StreamChatGenerics>>;\n\n/**\n * UI Component for message input\n * It's a consumer of\n * [Channel Context](https://getstream.github.io/stream-chat-react-native/v3/#channelcontext),\n * [Chat Context](https://getstream.github.io/stream-chat-react-native/v3/#chatcontext),\n * [MessageInput Context](https://getstream.github.io/stream-chat-react-native/v3/#messageinputcontext),\n * [Suggestions Context](https://getstream.github.io/stream-chat-react-native/v3/#suggestionscontext), and\n * [Translation Context](https://getstream.github.io/stream-chat-react-native/v3/#translationcontext)\n */\nexport const MessageInput = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: MessageInputProps<StreamChatGenerics>,\n) => {\n const ownCapabilities = useOwnCapabilitiesContext();\n\n const { disabled = false, members, watchers } = useChannelContext<StreamChatGenerics>();\n\n const {\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n clearEditingState,\n clearQuotedMessageState,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isValidMessage,\n maxNumberOfFiles,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeFile,\n removeImage,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n SendMessageDisallowedIndicator,\n setGiphyActive,\n setShowMoreOptions,\n showMoreOptions,\n ShowThreadMessageInChannelButton,\n uploadNewFile,\n uploadNewImage,\n } = useMessageInputContext<StreamChatGenerics>();\n\n const { Reply } = useMessagesContext<StreamChatGenerics>();\n\n const {\n AutoCompleteSuggestionHeader,\n AutoCompleteSuggestionItem,\n AutoCompleteSuggestionList,\n suggestions,\n triggerType,\n } = useSuggestionsContext<StreamChatGenerics>();\n\n const { thread } = useThreadContext<StreamChatGenerics>();\n\n const { t } = useTranslationContext();\n\n if (!ownCapabilities.sendMessage && SendMessageDisallowedIndicator) {\n return <SendMessageDisallowedIndicator />;\n }\n\n return (\n <MemoizedMessageInput\n {...{\n additionalTextInputProps,\n asyncIds,\n asyncUploads,\n AutoCompleteSuggestionHeader,\n AutoCompleteSuggestionItem,\n AutoCompleteSuggestionList,\n clearEditingState,\n clearQuotedMessageState,\n closeAttachmentPicker,\n cooldownEndsAt,\n CooldownTimer,\n disabled,\n editing,\n FileUploadPreview,\n fileUploads,\n giphyActive,\n ImageUploadPreview,\n imageUploads,\n Input,\n inputBoxRef,\n InputButtons,\n InputEditingStateHeader,\n InputGiphySearch,\n InputReplyStateHeader,\n isValidMessage,\n maxNumberOfFiles,\n members,\n mentionedUsers,\n numberOfUploads,\n quotedMessage,\n removeFile,\n removeImage,\n Reply,\n resetInput,\n SendButton,\n sending,\n sendMessageAsync,\n setGiphyActive,\n setShowMoreOptions,\n showMoreOptions,\n ShowThreadMessageInChannelButton,\n suggestions,\n t,\n thread,\n triggerType,\n uploadNewFile,\n uploadNewImage,\n watchers,\n }}\n {...props}\n />\n );\n};\n\nMessageInput.displayName = 'MessageInput{messageInput}';\n"]}
@@ -79,6 +79,22 @@ var styles = _reactNative.StyleSheet.create({
79
79
  }
80
80
  });
81
81
 
82
+ var getMessageType = function getMessageType(lastAttachment) {
83
+ var messageType;
84
+ var isLastAttachmentFile = lastAttachment.type === 'file' || lastAttachment.type === 'audio' || lastAttachment.type === 'video';
85
+ var isLastAttachmentGiphy = lastAttachment.type === 'giphy' || lastAttachment.type === 'imgur';
86
+ var isLastAttachmentImageOrGiphy = lastAttachment.type === 'image' && !lastAttachment.title_link && !lastAttachment.og_scrape_url;
87
+ var isLastAttachmentImage = lastAttachment.image_url || lastAttachment.thumb_url;
88
+
89
+ if (isLastAttachmentFile) {
90
+ messageType = 'file';
91
+ } else if (isLastAttachmentImageOrGiphy) {
92
+ if (isLastAttachmentImage) messageType = 'image';else messageType = undefined;
93
+ } else if (isLastAttachmentGiphy) messageType = 'giphy';else messageType = 'other';
94
+
95
+ return messageType;
96
+ };
97
+
82
98
  var ReplyWithContext = function ReplyWithContext(props) {
83
99
  var _quotedMessage$attach, _stylesProp$imageAtta, _stylesProp$imageAtta2, _stylesProp$imageAtta3, _stylesProp$imageAtta4, _stylesProp$fileAttac;
84
100
 
@@ -115,7 +131,7 @@ var ReplyWithContext = function ReplyWithContext(props) {
115
131
 
116
132
  if (typeof quotedMessage === 'boolean') return null;
117
133
  var lastAttachment = (_quotedMessage$attach = quotedMessage.attachments) == null ? void 0 : _quotedMessage$attach.slice(-1)[0];
118
- var messageType = lastAttachment ? lastAttachment.type === 'file' || lastAttachment.type === 'audio' ? 'file' : lastAttachment.type === 'image' && !lastAttachment.title_link && !lastAttachment.og_scrape_url ? lastAttachment.image_url || lastAttachment.thumb_url ? 'image' : undefined : lastAttachment.type === 'giphy' || lastAttachment.type === 'imgur' ? 'giphy' : 'other' : undefined;
134
+ var messageType = lastAttachment && getMessageType(lastAttachment);
119
135
  var hasImage = !error && lastAttachment && messageType !== 'file' && (lastAttachment.image_url || lastAttachment.thumb_url || lastAttachment.og_scrape_url);
120
136
 
121
137
  var onlyEmojis = !lastAttachment && !!quotedMessage.text && _utils.emojiRegex.test(quotedMessage.text);
@@ -125,7 +141,7 @@ var ReplyWithContext = function ReplyWithContext(props) {
125
141
  __self: _this,
126
142
  __source: {
127
143
  fileName: _jsxFileName,
128
- lineNumber: 132,
144
+ lineNumber: 149,
129
145
  columnNumber: 5
130
146
  }
131
147
  }, _react["default"].createElement(MessageAvatar, {
@@ -136,7 +152,7 @@ var ReplyWithContext = function ReplyWithContext(props) {
136
152
  __self: _this,
137
153
  __source: {
138
154
  fileName: _jsxFileName,
139
- lineNumber: 133,
155
+ lineNumber: 150,
140
156
  columnNumber: 7
141
157
  }
142
158
  }), _react["default"].createElement(_reactNative.View, {
@@ -148,7 +164,7 @@ var ReplyWithContext = function ReplyWithContext(props) {
148
164
  __self: _this,
149
165
  __source: {
150
166
  fileName: _jsxFileName,
151
- lineNumber: 134,
167
+ lineNumber: 151,
152
168
  columnNumber: 7
153
169
  }
154
170
  }, !error && lastAttachment ? messageType === 'file' ? _react["default"].createElement(_reactNative.View, {
@@ -156,7 +172,7 @@ var ReplyWithContext = function ReplyWithContext(props) {
156
172
  __self: _this,
157
173
  __source: {
158
174
  fileName: _jsxFileName,
159
- lineNumber: 149,
175
+ lineNumber: 166,
160
176
  columnNumber: 13
161
177
  }
162
178
  }, _react["default"].createElement(FileAttachmentIcon, {
@@ -165,7 +181,7 @@ var ReplyWithContext = function ReplyWithContext(props) {
165
181
  __self: _this,
166
182
  __source: {
167
183
  fileName: _jsxFileName,
168
- lineNumber: 156,
184
+ lineNumber: 173,
169
185
  columnNumber: 15
170
186
  }
171
187
  })) : hasImage ? _react["default"].createElement(_reactNative.Image, {
@@ -183,7 +199,7 @@ var ReplyWithContext = function ReplyWithContext(props) {
183
199
  __self: _this,
184
200
  __source: {
185
201
  fileName: _jsxFileName,
186
- lineNumber: 159,
202
+ lineNumber: 176,
187
203
  columnNumber: 13
188
204
  }
189
205
  }) : null : null, _react["default"].createElement(_MessageTextContainer.MessageTextContainer, {
@@ -206,7 +222,7 @@ var ReplyWithContext = function ReplyWithContext(props) {
206
222
  __self: _this,
207
223
  __source: {
208
224
  fileName: _jsxFileName,
209
- lineNumber: 180,
225
+ lineNumber: 197,
210
226
  columnNumber: 9
211
227
  }
212
228
  })));
@@ -250,7 +266,7 @@ var Reply = function Reply(props) {
250
266
  __self: _this,
251
267
  __source: {
252
268
  fileName: _jsxFileName,
253
- lineNumber: 284,
269
+ lineNumber: 301,
254
270
  columnNumber: 5
255
271
  }
256
272
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["Reply.tsx"],"names":["styles","StyleSheet","create","container","alignItems","flexDirection","fileAttachmentContainer","paddingLeft","paddingVertical","imageAttachment","borderRadius","height","marginLeft","marginVertical","width","messageContainer","borderBottomLeftRadius","borderBottomRightRadius","borderTopLeftRadius","borderTopRightRadius","flexGrow","flexShrink","text","fontSize","textContainer","maxWidth","undefined","paddingHorizontal","ReplyWithContext","props","FileAttachmentIcon","attachmentSize","MessageAvatar","quotedMessage","stylesProp","t","error","setError","theme","colors","blue_alice","border","grey","transparent","white","deletedText","messageSimple","content","reply","markdownStyles","lastAttachment","attachments","slice","messageType","type","title_link","og_scrape_url","image_url","thumb_url","hasImage","onlyEmojis","emojiRegex","test","backgroundColor","borderColor","borderWidth","mime_type","uri","url","deleted_at","em","color","length","title","marginRight","Number","areEqual","prevProps","nextProps","prevQuotedMessage","nextQuotedMessage","quotedMessageEqual","id","MemoizedReply","React","memo","Reply","message","FileIconDefault","MessageAvatarDefault","editing","quotedEditingMessage","quoted_message","displayName"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { Image, ImageStyle, StyleSheet, View, ViewStyle } from 'react-native';\n\nimport merge from 'lodash/merge';\n\nimport type { Attachment } from 'stream-chat';\n\nimport { useMessageContext } from '../../contexts/messageContext/MessageContext';\nimport {\n MessageInputContextValue,\n useMessageInputContext,\n} from '../../contexts/messageInputContext/MessageInputContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport {\n TranslationContextValue,\n useTranslationContext,\n} from '../../contexts/translationContext/TranslationContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { emojiRegex } from '../../utils/utils';\n\nimport { FileIcon as FileIconDefault } from '../Attachment/FileIcon';\nimport { MessageAvatar as MessageAvatarDefault } from '../Message/MessageSimple/MessageAvatar';\nimport { MessageTextContainer } from '../Message/MessageSimple/MessageTextContainer';\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'flex-end',\n flexDirection: 'row',\n },\n fileAttachmentContainer: { paddingLeft: 8, paddingVertical: 8 },\n imageAttachment: {\n borderRadius: 8,\n height: 32,\n marginLeft: 8,\n marginVertical: 8,\n width: 32,\n },\n messageContainer: {\n alignItems: 'flex-start',\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 12,\n borderTopLeftRadius: 12,\n borderTopRightRadius: 12,\n flexDirection: 'row',\n flexGrow: 1,\n flexShrink: 1,\n },\n text: { fontSize: 12 },\n textContainer: { maxWidth: undefined, paddingHorizontal: 8 },\n});\n\ntype ReplyPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<MessageInputContextValue<StreamChatGenerics>, 'quotedMessage'> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'FileAttachmentIcon' | 'MessageAvatar'> &\n Pick<TranslationContextValue, 't'> & {\n attachmentSize?: number;\n styles?: Partial<{\n container: ViewStyle;\n fileAttachmentContainer: ViewStyle;\n imageAttachment: ImageStyle;\n messageContainer: ViewStyle;\n textContainer: ViewStyle;\n }>;\n };\n\nconst ReplyWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ReplyPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n FileAttachmentIcon,\n attachmentSize = 40,\n MessageAvatar,\n quotedMessage,\n styles: stylesProp = {},\n t,\n } = props;\n\n const [error, setError] = useState(false);\n\n const {\n theme: {\n colors: { blue_alice, border, grey, transparent, white },\n messageSimple: {\n content: { deletedText },\n },\n reply: {\n container,\n fileAttachmentContainer,\n imageAttachment,\n markdownStyles,\n messageContainer,\n textContainer,\n },\n },\n } = useTheme();\n\n if (typeof quotedMessage === 'boolean') return null;\n\n const lastAttachment = quotedMessage.attachments?.slice(-1)[0] as Attachment<StreamChatGenerics>;\n\n const messageType = lastAttachment\n ? lastAttachment.type === 'file' || lastAttachment.type === 'audio'\n ? 'file'\n : lastAttachment.type === 'image' &&\n !lastAttachment.title_link &&\n !lastAttachment.og_scrape_url\n ? lastAttachment.image_url || lastAttachment.thumb_url\n ? 'image'\n : undefined\n : lastAttachment.type === 'giphy' || lastAttachment.type === 'imgur'\n ? 'giphy'\n : 'other'\n : undefined;\n\n const hasImage =\n !error &&\n lastAttachment &&\n messageType !== 'file' &&\n (lastAttachment.image_url || lastAttachment.thumb_url || lastAttachment.og_scrape_url);\n\n const onlyEmojis = !lastAttachment && !!quotedMessage.text && emojiRegex.test(quotedMessage.text);\n\n return (\n <View style={[styles.container, container, stylesProp.container]}>\n <MessageAvatar alignment={'left'} lastGroupMessage message={quotedMessage} size={24} />\n <View\n style={[\n styles.messageContainer,\n {\n backgroundColor:\n messageType === 'other' ? blue_alice : messageType === 'giphy' ? transparent : white,\n borderColor: border,\n borderWidth: messageType === 'other' ? 0 : 1,\n },\n messageContainer,\n stylesProp.messageContainer,\n ]}\n >\n {!error && lastAttachment ? (\n messageType === 'file' ? (\n <View\n style={[\n styles.fileAttachmentContainer,\n fileAttachmentContainer,\n stylesProp.fileAttachmentContainer,\n ]}\n >\n <FileAttachmentIcon mimeType={lastAttachment.mime_type} size={attachmentSize} />\n </View>\n ) : hasImage ? (\n <Image\n onError={() => setError(true)}\n source={{\n uri: getResizedImageUrl({\n height:\n stylesProp.imageAttachment?.height ||\n imageAttachment?.height ||\n styles.imageAttachment.height,\n url: (lastAttachment.image_url ||\n lastAttachment.thumb_url ||\n lastAttachment.og_scrape_url) as string,\n width:\n stylesProp.imageAttachment?.width ||\n imageAttachment?.width ||\n styles.imageAttachment.width,\n }),\n }}\n style={[styles.imageAttachment, imageAttachment, stylesProp.imageAttachment]}\n />\n ) : null\n ) : null}\n <MessageTextContainer<StreamChatGenerics>\n markdownStyles={\n quotedMessage.deleted_at\n ? merge({ em: { color: grey } }, deletedText)\n : { text: styles.text, ...markdownStyles }\n }\n message={{\n ...quotedMessage,\n text: quotedMessage.deleted_at\n ? `_${t('Message deleted')}_`\n : quotedMessage.text\n ? quotedMessage.text.length > 170\n ? `${quotedMessage.text.slice(0, 170)}...`\n : quotedMessage.text\n : messageType === 'image'\n ? t('Photo')\n : messageType === 'file'\n ? lastAttachment?.title || ''\n : '',\n }}\n onlyEmojis={onlyEmojis}\n styles={{\n textContainer: [\n {\n marginRight: hasImage\n ? Number(\n stylesProp.imageAttachment?.height ||\n imageAttachment.height ||\n styles.imageAttachment.height,\n ) +\n Number(\n stylesProp.imageAttachment?.marginLeft ||\n imageAttachment.marginLeft ||\n styles.imageAttachment.marginLeft,\n )\n : messageType === 'file'\n ? attachmentSize +\n Number(\n stylesProp.fileAttachmentContainer?.paddingLeft ||\n fileAttachmentContainer.paddingLeft ||\n styles.fileAttachmentContainer.paddingLeft,\n )\n : undefined,\n },\n styles.textContainer,\n textContainer,\n stylesProp.textContainer,\n ],\n }}\n />\n </View>\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: ReplyPropsWithContext<StreamChatGenerics>,\n nextProps: ReplyPropsWithContext<StreamChatGenerics>,\n) => {\n const { quotedMessage: prevQuotedMessage } = prevProps;\n const { quotedMessage: nextQuotedMessage } = nextProps;\n\n const quotedMessageEqual =\n !!prevQuotedMessage &&\n !!nextQuotedMessage &&\n typeof prevQuotedMessage !== 'boolean' &&\n typeof nextQuotedMessage !== 'boolean'\n ? prevQuotedMessage.id === nextQuotedMessage.id &&\n prevQuotedMessage.deleted_at === nextQuotedMessage.deleted_at\n : !!prevQuotedMessage === !!nextQuotedMessage;\n\n if (!quotedMessageEqual) return false;\n\n return true;\n};\n\nconst MemoizedReply = React.memo(ReplyWithContext, areEqual) as typeof ReplyWithContext;\n\nexport type ReplyProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<ReplyPropsWithContext<StreamChatGenerics>>;\n\n/**\n * UI Component for reply\n */\nexport const Reply = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ReplyProps<StreamChatGenerics>,\n) => {\n const { message } = useMessageContext<StreamChatGenerics>();\n\n const { FileAttachmentIcon = FileIconDefault, MessageAvatar = MessageAvatarDefault } =\n useMessagesContext<StreamChatGenerics>();\n\n const { editing, quotedMessage } = useMessageInputContext<StreamChatGenerics>();\n\n const quotedEditingMessage = (\n typeof editing !== 'boolean' ? editing?.quoted_message || false : false\n ) as MessageInputContextValue<StreamChatGenerics>['quotedMessage'];\n\n const { t } = useTranslationContext();\n\n return (\n <MemoizedReply\n {...{\n FileAttachmentIcon,\n MessageAvatar,\n quotedMessage: message\n ? (message.quoted_message as MessageInputContextValue<StreamChatGenerics>['quotedMessage'])\n : quotedMessage || quotedEditingMessage,\n t,\n }}\n {...props}\n />\n );\n};\n\nReply.displayName = 'Reply{reply}';\n"]}
1
+ {"version":3,"sources":["Reply.tsx"],"names":["styles","StyleSheet","create","container","alignItems","flexDirection","fileAttachmentContainer","paddingLeft","paddingVertical","imageAttachment","borderRadius","height","marginLeft","marginVertical","width","messageContainer","borderBottomLeftRadius","borderBottomRightRadius","borderTopLeftRadius","borderTopRightRadius","flexGrow","flexShrink","text","fontSize","textContainer","maxWidth","undefined","paddingHorizontal","getMessageType","lastAttachment","messageType","isLastAttachmentFile","type","isLastAttachmentGiphy","isLastAttachmentImageOrGiphy","title_link","og_scrape_url","isLastAttachmentImage","image_url","thumb_url","ReplyWithContext","props","FileAttachmentIcon","attachmentSize","MessageAvatar","quotedMessage","stylesProp","t","error","setError","theme","colors","blue_alice","border","grey","transparent","white","deletedText","messageSimple","content","reply","markdownStyles","attachments","slice","hasImage","onlyEmojis","emojiRegex","test","backgroundColor","borderColor","borderWidth","mime_type","uri","url","deleted_at","em","color","length","title","marginRight","Number","areEqual","prevProps","nextProps","prevQuotedMessage","nextQuotedMessage","quotedMessageEqual","id","MemoizedReply","React","memo","Reply","message","FileIconDefault","MessageAvatarDefault","editing","quotedEditingMessage","quoted_message","displayName"],"mappings":"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","sourcesContent":["import React, { useState } from 'react';\nimport { Image, ImageStyle, StyleSheet, View, ViewStyle } from 'react-native';\n\nimport merge from 'lodash/merge';\n\nimport type { Attachment } from 'stream-chat';\n\nimport { useMessageContext } from '../../contexts/messageContext/MessageContext';\nimport {\n MessageInputContextValue,\n useMessageInputContext,\n} from '../../contexts/messageInputContext/MessageInputContext';\nimport {\n MessagesContextValue,\n useMessagesContext,\n} from '../../contexts/messagesContext/MessagesContext';\nimport { useTheme } from '../../contexts/themeContext/ThemeContext';\nimport {\n TranslationContextValue,\n useTranslationContext,\n} from '../../contexts/translationContext/TranslationContext';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getResizedImageUrl } from '../../utils/getResizedImageUrl';\nimport { emojiRegex } from '../../utils/utils';\n\nimport { FileIcon as FileIconDefault } from '../Attachment/FileIcon';\nimport { MessageAvatar as MessageAvatarDefault } from '../Message/MessageSimple/MessageAvatar';\nimport { MessageTextContainer } from '../Message/MessageSimple/MessageTextContainer';\n\nconst styles = StyleSheet.create({\n container: {\n alignItems: 'flex-end',\n flexDirection: 'row',\n },\n fileAttachmentContainer: { paddingLeft: 8, paddingVertical: 8 },\n imageAttachment: {\n borderRadius: 8,\n height: 32,\n marginLeft: 8,\n marginVertical: 8,\n width: 32,\n },\n messageContainer: {\n alignItems: 'flex-start',\n borderBottomLeftRadius: 0,\n borderBottomRightRadius: 12,\n borderTopLeftRadius: 12,\n borderTopRightRadius: 12,\n flexDirection: 'row',\n flexGrow: 1,\n flexShrink: 1,\n },\n text: { fontSize: 12 },\n textContainer: { maxWidth: undefined, paddingHorizontal: 8 },\n});\n\ntype ReplyPropsWithContext<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Pick<MessageInputContextValue<StreamChatGenerics>, 'quotedMessage'> &\n Pick<MessagesContextValue<StreamChatGenerics>, 'FileAttachmentIcon' | 'MessageAvatar'> &\n Pick<TranslationContextValue, 't'> & {\n attachmentSize?: number;\n styles?: Partial<{\n container: ViewStyle;\n fileAttachmentContainer: ViewStyle;\n imageAttachment: ImageStyle;\n messageContainer: ViewStyle;\n textContainer: ViewStyle;\n }>;\n };\n\nconst getMessageType = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n lastAttachment: Attachment<StreamChatGenerics>,\n) => {\n let messageType;\n\n const isLastAttachmentFile =\n lastAttachment.type === 'file' ||\n lastAttachment.type === 'audio' ||\n lastAttachment.type === 'video';\n\n const isLastAttachmentGiphy = lastAttachment.type === 'giphy' || lastAttachment.type === 'imgur';\n\n const isLastAttachmentImageOrGiphy =\n lastAttachment.type === 'image' && !lastAttachment.title_link && !lastAttachment.og_scrape_url;\n\n const isLastAttachmentImage = lastAttachment.image_url || lastAttachment.thumb_url;\n\n if (isLastAttachmentFile) {\n messageType = 'file';\n } else if (isLastAttachmentImageOrGiphy) {\n if (isLastAttachmentImage) messageType = 'image';\n else messageType = undefined;\n } else if (isLastAttachmentGiphy) messageType = 'giphy';\n else messageType = 'other';\n\n return messageType;\n};\n\nconst ReplyWithContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ReplyPropsWithContext<StreamChatGenerics>,\n) => {\n const {\n FileAttachmentIcon,\n attachmentSize = 40,\n MessageAvatar,\n quotedMessage,\n styles: stylesProp = {},\n t,\n } = props;\n\n const [error, setError] = useState(false);\n\n const {\n theme: {\n colors: { blue_alice, border, grey, transparent, white },\n messageSimple: {\n content: { deletedText },\n },\n reply: {\n container,\n fileAttachmentContainer,\n imageAttachment,\n markdownStyles,\n messageContainer,\n textContainer,\n },\n },\n } = useTheme();\n\n if (typeof quotedMessage === 'boolean') return null;\n\n const lastAttachment = quotedMessage.attachments?.slice(-1)[0] as Attachment<StreamChatGenerics>;\n const messageType = lastAttachment && getMessageType(lastAttachment);\n\n const hasImage =\n !error &&\n lastAttachment &&\n messageType !== 'file' &&\n (lastAttachment.image_url || lastAttachment.thumb_url || lastAttachment.og_scrape_url);\n\n const onlyEmojis = !lastAttachment && !!quotedMessage.text && emojiRegex.test(quotedMessage.text);\n\n return (\n <View style={[styles.container, container, stylesProp.container]}>\n <MessageAvatar alignment={'left'} lastGroupMessage message={quotedMessage} size={24} />\n <View\n style={[\n styles.messageContainer,\n {\n backgroundColor:\n messageType === 'other' ? blue_alice : messageType === 'giphy' ? transparent : white,\n borderColor: border,\n borderWidth: messageType === 'other' ? 0 : 1,\n },\n messageContainer,\n stylesProp.messageContainer,\n ]}\n >\n {!error && lastAttachment ? (\n messageType === 'file' ? (\n <View\n style={[\n styles.fileAttachmentContainer,\n fileAttachmentContainer,\n stylesProp.fileAttachmentContainer,\n ]}\n >\n <FileAttachmentIcon mimeType={lastAttachment.mime_type} size={attachmentSize} />\n </View>\n ) : hasImage ? (\n <Image\n onError={() => setError(true)}\n source={{\n uri: getResizedImageUrl({\n height:\n stylesProp.imageAttachment?.height ||\n imageAttachment?.height ||\n styles.imageAttachment.height,\n url: (lastAttachment.image_url ||\n lastAttachment.thumb_url ||\n lastAttachment.og_scrape_url) as string,\n width:\n stylesProp.imageAttachment?.width ||\n imageAttachment?.width ||\n styles.imageAttachment.width,\n }),\n }}\n style={[styles.imageAttachment, imageAttachment, stylesProp.imageAttachment]}\n />\n ) : null\n ) : null}\n <MessageTextContainer<StreamChatGenerics>\n markdownStyles={\n quotedMessage.deleted_at\n ? merge({ em: { color: grey } }, deletedText)\n : { text: styles.text, ...markdownStyles }\n }\n message={{\n ...quotedMessage,\n text: quotedMessage.deleted_at\n ? `_${t('Message deleted')}_`\n : quotedMessage.text\n ? quotedMessage.text.length > 170\n ? `${quotedMessage.text.slice(0, 170)}...`\n : quotedMessage.text\n : messageType === 'image'\n ? t('Photo')\n : messageType === 'file'\n ? lastAttachment?.title || ''\n : '',\n }}\n onlyEmojis={onlyEmojis}\n styles={{\n textContainer: [\n {\n marginRight: hasImage\n ? Number(\n stylesProp.imageAttachment?.height ||\n imageAttachment.height ||\n styles.imageAttachment.height,\n ) +\n Number(\n stylesProp.imageAttachment?.marginLeft ||\n imageAttachment.marginLeft ||\n styles.imageAttachment.marginLeft,\n )\n : messageType === 'file'\n ? attachmentSize +\n Number(\n stylesProp.fileAttachmentContainer?.paddingLeft ||\n fileAttachmentContainer.paddingLeft ||\n styles.fileAttachmentContainer.paddingLeft,\n )\n : undefined,\n },\n styles.textContainer,\n textContainer,\n stylesProp.textContainer,\n ],\n }}\n />\n </View>\n </View>\n );\n};\n\nconst areEqual = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(\n prevProps: ReplyPropsWithContext<StreamChatGenerics>,\n nextProps: ReplyPropsWithContext<StreamChatGenerics>,\n) => {\n const { quotedMessage: prevQuotedMessage } = prevProps;\n const { quotedMessage: nextQuotedMessage } = nextProps;\n\n const quotedMessageEqual =\n !!prevQuotedMessage &&\n !!nextQuotedMessage &&\n typeof prevQuotedMessage !== 'boolean' &&\n typeof nextQuotedMessage !== 'boolean'\n ? prevQuotedMessage.id === nextQuotedMessage.id &&\n prevQuotedMessage.deleted_at === nextQuotedMessage.deleted_at\n : !!prevQuotedMessage === !!nextQuotedMessage;\n\n if (!quotedMessageEqual) return false;\n\n return true;\n};\n\nconst MemoizedReply = React.memo(ReplyWithContext, areEqual) as typeof ReplyWithContext;\n\nexport type ReplyProps<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = Partial<ReplyPropsWithContext<StreamChatGenerics>>;\n\n/**\n * UI Component for reply\n */\nexport const Reply = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n props: ReplyProps<StreamChatGenerics>,\n) => {\n const { message } = useMessageContext<StreamChatGenerics>();\n\n const { FileAttachmentIcon = FileIconDefault, MessageAvatar = MessageAvatarDefault } =\n useMessagesContext<StreamChatGenerics>();\n\n const { editing, quotedMessage } = useMessageInputContext<StreamChatGenerics>();\n\n const quotedEditingMessage = (\n typeof editing !== 'boolean' ? editing?.quoted_message || false : false\n ) as MessageInputContextValue<StreamChatGenerics>['quotedMessage'];\n\n const { t } = useTranslationContext();\n\n return (\n <MemoizedReply\n {...{\n FileAttachmentIcon,\n MessageAvatar,\n quotedMessage: message\n ? (message.quoted_message as MessageInputContextValue<StreamChatGenerics>['quotedMessage'])\n : quotedMessage || quotedEditingMessage,\n t,\n }}\n {...props}\n />\n );\n};\n\nReply.displayName = 'Reply{reply}';\n"]}
@@ -49,15 +49,20 @@ var AttachmentPickerProvider = function AttachmentPickerProvider(_ref) {
49
49
  selectedImages = _useState6[0],
50
50
  setSelectedImages = _useState6[1];
51
51
 
52
- var _useState7 = (0, _react.useState)(),
52
+ var _useState7 = (0, _react.useState)([]),
53
53
  _useState8 = (0, _slicedToArray2["default"])(_useState7, 2),
54
- selectedPicker = _useState8[0],
55
- setSelectedPicker = _useState8[1];
54
+ selectedFiles = _useState8[0],
55
+ setSelectedFiles = _useState8[1];
56
56
 
57
- var _useState9 = (0, _react.useState)((_value$topInset = value == null ? void 0 : value.topInset) != null ? _value$topInset : 0),
57
+ var _useState9 = (0, _react.useState)(),
58
58
  _useState10 = (0, _slicedToArray2["default"])(_useState9, 2),
59
- topInset = _useState10[0],
60
- setTopInset = _useState10[1];
59
+ selectedPicker = _useState10[0],
60
+ setSelectedPicker = _useState10[1];
61
+
62
+ var _useState11 = (0, _react.useState)((_value$topInset = value == null ? void 0 : value.topInset) != null ? _value$topInset : 0),
63
+ _useState12 = (0, _slicedToArray2["default"])(_useState11, 2),
64
+ topInset = _useState12[0],
65
+ setTopInset = _useState12[1];
61
66
 
62
67
  (0, _react.useEffect)(function () {
63
68
  setBottomInset(bottomInsetValue != null ? bottomInsetValue : 0);
@@ -67,10 +72,12 @@ var AttachmentPickerProvider = function AttachmentPickerProvider(_ref) {
67
72
  }, [topInsetValue]);
68
73
  var combinedValue = (0, _extends2["default"])({
69
74
  maxNumberOfFiles: maxNumberOfFiles,
75
+ selectedFiles: selectedFiles,
70
76
  selectedImages: selectedImages,
71
77
  selectedPicker: selectedPicker,
72
78
  setBottomInset: setBottomInset,
73
79
  setMaxNumberOfFiles: setMaxNumberOfFiles,
80
+ setSelectedFiles: setSelectedFiles,
74
81
  setSelectedImages: setSelectedImages,
75
82
  setSelectedPicker: setSelectedPicker,
76
83
  setTopInset: setTopInset
@@ -83,7 +90,7 @@ var AttachmentPickerProvider = function AttachmentPickerProvider(_ref) {
83
90
  __self: _this,
84
91
  __source: {
85
92
  fileName: _jsxFileName,
86
- lineNumber: 109,
93
+ lineNumber: 113,
87
94
  columnNumber: 5
88
95
  }
89
96
  }, children);
@@ -104,7 +111,7 @@ var withAttachmentPickerContext = function withAttachmentPickerContext(Component
104
111
  __self: _this,
105
112
  __source: {
106
113
  fileName: _jsxFileName,
107
- lineNumber: 130,
114
+ lineNumber: 134,
108
115
  columnNumber: 12
109
116
  }
110
117
  }));
@@ -1 +1 @@
1
- {"version":3,"sources":["AttachmentPickerContext.tsx"],"names":["AttachmentPickerContext","React","createContext","AttachmentPickerProvider","children","value","bottomInsetValue","bottomInset","topInsetValue","topInset","setBottomInset","maxNumberOfFiles","setMaxNumberOfFiles","selectedImages","setSelectedImages","selectedPicker","setSelectedPicker","setTopInset","combinedValue","useAttachmentPickerContext","withAttachmentPickerContext","Component","WithAttachmentPickerContextComponent","props","attachmentPickerContext","displayName"],"mappings":";;;;;;;;;;;;;AAAA;;AAIA;;;;;;;;;AAoDO,IAAMA,uBAAuB,GAAGC,kBAAMC,aAAN,CACrC,EADqC,CAAhC;;;;AAIA,IAAMC,wBAAwB,GAAG,SAA3BA,wBAA2B,OAejC;AAAA;;AAAA,MAdLC,QAcK,QAdLA,QAcK;AAAA,MAbLC,KAaK,QAbLA,KAaK;AACL,MAAMC,gBAAgB,GAAGD,KAAH,oBAAGA,KAAK,CAAEE,WAAhC;AACA,MAAMC,aAAa,GAAGH,KAAH,oBAAGA,KAAK,CAAEI,QAA7B;;AAEA,kBAAsC,qBAAiBH,gBAAjB,WAAiBA,gBAAjB,GAAqC,CAArC,CAAtC;AAAA;AAAA,MAAOC,WAAP;AAAA,MAAoBG,cAApB;;AACA,mBAAgD,qBAAS,EAAT,CAAhD;AAAA;AAAA,MAAOC,gBAAP;AAAA,MAAyBC,mBAAzB;;AACA,mBAA4C,qBAAkB,EAAlB,CAA5C;AAAA;AAAA,MAAOC,cAAP;AAAA,MAAuBC,iBAAvB;;AACA,mBAA4C,sBAA5C;AAAA;AAAA,MAAOC,cAAP;AAAA,MAAuBC,iBAAvB;;AACA,mBAAgC,wCAAiBX,KAAjB,oBAAiBA,KAAK,CAAEI,QAAxB,8BAAoC,CAApC,CAAhC;AAAA;AAAA,MAAOA,QAAP;AAAA,MAAiBQ,WAAjB;;AAEA,wBAAU,YAAM;AACdP,IAAAA,cAAc,CAACJ,gBAAD,WAACA,gBAAD,GAAqB,CAArB,CAAd;AACD,GAFD,EAEG,CAACA,gBAAD,CAFH;AAIA,wBAAU,YAAM;AACdW,IAAAA,WAAW,CAACT,aAAD,WAACA,aAAD,GAAkB,CAAlB,CAAX;AACD,GAFD,EAEG,CAACA,aAAD,CAFH;AAIA,MAAMU,aAAa;AACjBP,IAAAA,gBAAgB,EAAhBA,gBADiB;AAEjBE,IAAAA,cAAc,EAAdA,cAFiB;AAGjBE,IAAAA,cAAc,EAAdA,cAHiB;AAIjBL,IAAAA,cAAc,EAAdA,cAJiB;AAKjBE,IAAAA,mBAAmB,EAAnBA,mBALiB;AAMjBE,IAAAA,iBAAiB,EAAjBA,iBANiB;AAOjBE,IAAAA,iBAAiB,EAAjBA,iBAPiB;AAQjBC,IAAAA,WAAW,EAAXA;AARiB,KASdZ,KATc;AAUjBE,IAAAA,WAAW,EAAXA,WAViB;AAWjBE,IAAAA,QAAQ,EAARA;AAXiB,IAAnB;AAcA,SACE,gCAAC,uBAAD,CAAyB,QAAzB;AACE,IAAA,KAAK,EAAES,aADT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAGGd,QAHH,CADF;AAOD,CAtDM;;;;AAwDA,IAAMe,0BAA0B,GAAG,SAA7BA,0BAA6B;AAAA,SACxC,uBAAWnB,uBAAX,CADwC;AAAA,CAAnC;;;;AAGA,IAAMoB,2BAA2B,GAAG,SAA9BA,2BAA8B,CAGzCC,SAHyC,EAIkC;AAC3E,MAAMC,oCAAoC,GAAG,SAAvCA,oCAAuC,CAC3CC,KAD2C,EAExC;AACH,QAAMC,uBAAuB,GAAGL,0BAA0B,EAA1D;AAEA,WAAO,gCAAC,SAAD,gCAAgBI,KAAhB,EAAkDC,uBAAlD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAP;AACD,GAND;;AAOAF,EAAAA,oCAAoC,CAACG,WAArC,mCAAiF,oCAC/EJ,SAD+E,CAAjF;AAGA,SAAOC,oCAAP;AACD,CAhBM","sourcesContent":["import React, { PropsWithChildren, useContext, useEffect, useState } from 'react';\n\nimport type { Asset } from '../../native';\nimport type { DefaultStreamChatGenerics } from '../../types/types';\nimport { getDisplayName } from '../utils/getDisplayName';\n\nexport type AttachmentPickerIconProps = {\n numberOfImageUploads: number;\n selectedPicker?: 'images';\n};\n\nexport type AttachmentPickerContextValue = {\n /**\n * `bottomInset` determine the height of the `AttachmentPicker` and the underlying shift to the `MessageList` when it is opened.\n * This can also be set via the `setBottomInset` function provided by the `useAttachmentPickerContext` hook.\n *\n * Please check [OverlayProvider](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#overlayprovider) section in Cookbook\n * for more details.\n */\n bottomInset: number;\n /**\n * Custom UI component for [camera selector icon](https://github.com/GetStream/stream-chat-react-native/blob/master/screenshots/docs/1.png)\n *\n * **Default: ** [CameraSelectorIcon](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/AttachmentPicker/components/CameraSelectorIcon.tsx)\n */\n CameraSelectorIcon: React.ComponentType<AttachmentPickerIconProps>;\n closePicker: () => void;\n /**\n * Custom UI component for [file selector icon](https://github.com/GetStream/stream-chat-react-native/blob/master/screenshots/docs/1.png)\n *\n * **Default: ** [FileSelectorIcon](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/AttachmentPicker/components/FileSelectorIcon.tsx)\n */\n FileSelectorIcon: React.ComponentType<AttachmentPickerIconProps>;\n /**\n * Custom UI component for [image selector icon](https://github.com/GetStream/stream-chat-react-native/blob/master/screenshots/docs/1.png)\n *\n * **Default: ** [ImageSelectorIcon](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/AttachmentPicker/components/ImageSelectorIcon.tsx)\n */\n ImageSelectorIcon: React.ComponentType<AttachmentPickerIconProps>;\n /**\n * Limit for maximum files that can be attached per message.\n */\n maxNumberOfFiles: number;\n openPicker: () => void;\n selectedImages: Asset[];\n setBottomInset: React.Dispatch<React.SetStateAction<number>>;\n setMaxNumberOfFiles: React.Dispatch<React.SetStateAction<number>>;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n setSelectedPicker: React.Dispatch<React.SetStateAction<'images' | undefined>>;\n setTopInset: React.Dispatch<React.SetStateAction<number>>;\n topInset: number;\n attachmentPickerBottomSheetHeight?: number;\n attachmentSelectionBarHeight?: number;\n selectedPicker?: 'images';\n};\n\nexport const AttachmentPickerContext = React.createContext<AttachmentPickerContextValue>(\n {} as AttachmentPickerContextValue,\n);\n\nexport const AttachmentPickerProvider = ({\n children,\n value,\n}: PropsWithChildren<{\n value?: Pick<\n AttachmentPickerContextValue,\n | 'attachmentSelectionBarHeight'\n | 'attachmentPickerBottomSheetHeight'\n | 'CameraSelectorIcon'\n | 'closePicker'\n | 'FileSelectorIcon'\n | 'ImageSelectorIcon'\n | 'openPicker'\n > &\n Partial<Pick<AttachmentPickerContextValue, 'bottomInset' | 'topInset'>>;\n}>) => {\n const bottomInsetValue = value?.bottomInset;\n const topInsetValue = value?.topInset;\n\n const [bottomInset, setBottomInset] = useState<number>(bottomInsetValue ?? 0);\n const [maxNumberOfFiles, setMaxNumberOfFiles] = useState(10);\n const [selectedImages, setSelectedImages] = useState<Asset[]>([]);\n const [selectedPicker, setSelectedPicker] = useState<'images'>();\n const [topInset, setTopInset] = useState<number>(value?.topInset ?? 0);\n\n useEffect(() => {\n setBottomInset(bottomInsetValue ?? 0);\n }, [bottomInsetValue]);\n\n useEffect(() => {\n setTopInset(topInsetValue ?? 0);\n }, [topInsetValue]);\n\n const combinedValue = {\n maxNumberOfFiles,\n selectedImages,\n selectedPicker,\n setBottomInset,\n setMaxNumberOfFiles,\n setSelectedImages,\n setSelectedPicker,\n setTopInset,\n ...value,\n bottomInset,\n topInset,\n };\n\n return (\n <AttachmentPickerContext.Provider\n value={combinedValue as unknown as AttachmentPickerContextValue}\n >\n {children}\n </AttachmentPickerContext.Provider>\n );\n};\n\nexport const useAttachmentPickerContext = () =>\n useContext(AttachmentPickerContext) as unknown as AttachmentPickerContextValue;\n\nexport const withAttachmentPickerContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n Component: React.ComponentType<StreamChatGenerics>,\n): React.FC<Omit<StreamChatGenerics, keyof AttachmentPickerContextValue>> => {\n const WithAttachmentPickerContextComponent = (\n props: Omit<StreamChatGenerics, keyof AttachmentPickerContextValue>,\n ) => {\n const attachmentPickerContext = useAttachmentPickerContext();\n\n return <Component {...(props as StreamChatGenerics)} {...attachmentPickerContext} />;\n };\n WithAttachmentPickerContextComponent.displayName = `WithAttachmentPickerContext${getDisplayName(\n Component as React.ComponentType,\n )}`;\n return WithAttachmentPickerContextComponent;\n};\n"]}
1
+ {"version":3,"sources":["AttachmentPickerContext.tsx"],"names":["AttachmentPickerContext","React","createContext","AttachmentPickerProvider","children","value","bottomInsetValue","bottomInset","topInsetValue","topInset","setBottomInset","maxNumberOfFiles","setMaxNumberOfFiles","selectedImages","setSelectedImages","selectedFiles","setSelectedFiles","selectedPicker","setSelectedPicker","setTopInset","combinedValue","useAttachmentPickerContext","withAttachmentPickerContext","Component","WithAttachmentPickerContextComponent","props","attachmentPickerContext","displayName"],"mappings":";;;;;;;;;;;;;AAAA;;AAGA;;;;;;;;;AAsDO,IAAMA,uBAAuB,GAAGC,kBAAMC,aAAN,CACrC,EADqC,CAAhC;;;;AAIA,IAAMC,wBAAwB,GAAG,SAA3BA,wBAA2B,OAejC;AAAA;;AAAA,MAdLC,QAcK,QAdLA,QAcK;AAAA,MAbLC,KAaK,QAbLA,KAaK;AACL,MAAMC,gBAAgB,GAAGD,KAAH,oBAAGA,KAAK,CAAEE,WAAhC;AACA,MAAMC,aAAa,GAAGH,KAAH,oBAAGA,KAAK,CAAEI,QAA7B;;AAEA,kBAAsC,qBAAiBH,gBAAjB,WAAiBA,gBAAjB,GAAqC,CAArC,CAAtC;AAAA;AAAA,MAAOC,WAAP;AAAA,MAAoBG,cAApB;;AACA,mBAAgD,qBAAS,EAAT,CAAhD;AAAA;AAAA,MAAOC,gBAAP;AAAA,MAAyBC,mBAAzB;;AACA,mBAA4C,qBAAkB,EAAlB,CAA5C;AAAA;AAAA,MAAOC,cAAP;AAAA,MAAuBC,iBAAvB;;AACA,mBAA0C,qBAAiB,EAAjB,CAA1C;AAAA;AAAA,MAAOC,aAAP;AAAA,MAAsBC,gBAAtB;;AACA,mBAA4C,sBAA5C;AAAA;AAAA,MAAOC,cAAP;AAAA,MAAuBC,iBAAvB;;AACA,oBAAgC,wCAAiBb,KAAjB,oBAAiBA,KAAK,CAAEI,QAAxB,8BAAoC,CAApC,CAAhC;AAAA;AAAA,MAAOA,QAAP;AAAA,MAAiBU,WAAjB;;AAEA,wBAAU,YAAM;AACdT,IAAAA,cAAc,CAACJ,gBAAD,WAACA,gBAAD,GAAqB,CAArB,CAAd;AACD,GAFD,EAEG,CAACA,gBAAD,CAFH;AAIA,wBAAU,YAAM;AACda,IAAAA,WAAW,CAACX,aAAD,WAACA,aAAD,GAAkB,CAAlB,CAAX;AACD,GAFD,EAEG,CAACA,aAAD,CAFH;AAIA,MAAMY,aAAa;AACjBT,IAAAA,gBAAgB,EAAhBA,gBADiB;AAEjBI,IAAAA,aAAa,EAAbA,aAFiB;AAGjBF,IAAAA,cAAc,EAAdA,cAHiB;AAIjBI,IAAAA,cAAc,EAAdA,cAJiB;AAKjBP,IAAAA,cAAc,EAAdA,cALiB;AAMjBE,IAAAA,mBAAmB,EAAnBA,mBANiB;AAOjBI,IAAAA,gBAAgB,EAAhBA,gBAPiB;AAQjBF,IAAAA,iBAAiB,EAAjBA,iBARiB;AASjBI,IAAAA,iBAAiB,EAAjBA,iBATiB;AAUjBC,IAAAA,WAAW,EAAXA;AAViB,KAWdd,KAXc;AAYjBE,IAAAA,WAAW,EAAXA,WAZiB;AAajBE,IAAAA,QAAQ,EAARA;AAbiB,IAAnB;AAgBA,SACE,gCAAC,uBAAD,CAAyB,QAAzB;AACE,IAAA,KAAK,EAAEW,aADT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KAGGhB,QAHH,CADF;AAOD,CAzDM;;;;AA2DA,IAAMiB,0BAA0B,GAAG,SAA7BA,0BAA6B;AAAA,SACxC,uBAAWrB,uBAAX,CADwC;AAAA,CAAnC;;;;AAGA,IAAMsB,2BAA2B,GAAG,SAA9BA,2BAA8B,CAGzCC,SAHyC,EAIkC;AAC3E,MAAMC,oCAAoC,GAAG,SAAvCA,oCAAuC,CAC3CC,KAD2C,EAExC;AACH,QAAMC,uBAAuB,GAAGL,0BAA0B,EAA1D;AAEA,WAAO,gCAAC,SAAD,gCAAgBI,KAAhB,EAAkDC,uBAAlD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAP;AACD,GAND;;AAOAF,EAAAA,oCAAoC,CAACG,WAArC,mCAAiF,oCAC/EJ,SAD+E,CAAjF;AAGA,SAAOC,oCAAP;AACD,CAhBM","sourcesContent":["import React, { PropsWithChildren, useContext, useEffect, useState } from 'react';\n\nimport type { Asset, DefaultStreamChatGenerics, File } from '../../types/types';\nimport { getDisplayName } from '../utils/getDisplayName';\n\nexport type AttachmentPickerIconProps = {\n numberOfImageUploads: number;\n selectedPicker?: 'images';\n};\n\nexport type AttachmentPickerContextValue = {\n /**\n * `bottomInset` determine the height of the `AttachmentPicker` and the underlying shift to the `MessageList` when it is opened.\n * This can also be set via the `setBottomInset` function provided by the `useAttachmentPickerContext` hook.\n *\n * Please check [OverlayProvider](https://github.com/GetStream/stream-chat-react-native/wiki/Cookbook-v3.0#overlayprovider) section in Cookbook\n * for more details.\n */\n bottomInset: number;\n /**\n * Custom UI component for [camera selector icon](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png)\n *\n * **Default: ** [CameraSelectorIcon](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/CameraSelectorIcon.tsx)\n */\n CameraSelectorIcon: React.ComponentType<AttachmentPickerIconProps>;\n closePicker: () => void;\n /**\n * Custom UI component for [file selector icon](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png)\n *\n * **Default: ** [FileSelectorIcon](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/FileSelectorIcon.tsx)\n */\n FileSelectorIcon: React.ComponentType<AttachmentPickerIconProps>;\n /**\n * Custom UI component for [image selector icon](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png)\n *\n * **Default: ** [ImageSelectorIcon](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/ImageSelectorIcon.tsx)\n */\n ImageSelectorIcon: React.ComponentType<AttachmentPickerIconProps>;\n /**\n * Limit for maximum files that can be attached per message.\n */\n maxNumberOfFiles: number;\n openPicker: () => void;\n selectedFiles: File[];\n selectedImages: Asset[];\n setBottomInset: React.Dispatch<React.SetStateAction<number>>;\n setMaxNumberOfFiles: React.Dispatch<React.SetStateAction<number>>;\n setSelectedFiles: React.Dispatch<React.SetStateAction<File[]>>;\n setSelectedImages: React.Dispatch<React.SetStateAction<Asset[]>>;\n setSelectedPicker: React.Dispatch<React.SetStateAction<'images' | undefined>>;\n setTopInset: React.Dispatch<React.SetStateAction<number>>;\n topInset: number;\n attachmentPickerBottomSheetHeight?: number;\n attachmentSelectionBarHeight?: number;\n selectedPicker?: 'images';\n};\n\nexport const AttachmentPickerContext = React.createContext<AttachmentPickerContextValue>(\n {} as AttachmentPickerContextValue,\n);\n\nexport const AttachmentPickerProvider = ({\n children,\n value,\n}: PropsWithChildren<{\n value?: Pick<\n AttachmentPickerContextValue,\n | 'attachmentSelectionBarHeight'\n | 'attachmentPickerBottomSheetHeight'\n | 'CameraSelectorIcon'\n | 'closePicker'\n | 'FileSelectorIcon'\n | 'ImageSelectorIcon'\n | 'openPicker'\n > &\n Partial<Pick<AttachmentPickerContextValue, 'bottomInset' | 'topInset'>>;\n}>) => {\n const bottomInsetValue = value?.bottomInset;\n const topInsetValue = value?.topInset;\n\n const [bottomInset, setBottomInset] = useState<number>(bottomInsetValue ?? 0);\n const [maxNumberOfFiles, setMaxNumberOfFiles] = useState(10);\n const [selectedImages, setSelectedImages] = useState<Asset[]>([]);\n const [selectedFiles, setSelectedFiles] = useState<File[]>([]);\n const [selectedPicker, setSelectedPicker] = useState<'images'>();\n const [topInset, setTopInset] = useState<number>(value?.topInset ?? 0);\n\n useEffect(() => {\n setBottomInset(bottomInsetValue ?? 0);\n }, [bottomInsetValue]);\n\n useEffect(() => {\n setTopInset(topInsetValue ?? 0);\n }, [topInsetValue]);\n\n const combinedValue = {\n maxNumberOfFiles,\n selectedFiles,\n selectedImages,\n selectedPicker,\n setBottomInset,\n setMaxNumberOfFiles,\n setSelectedFiles,\n setSelectedImages,\n setSelectedPicker,\n setTopInset,\n ...value,\n bottomInset,\n topInset,\n };\n\n return (\n <AttachmentPickerContext.Provider\n value={combinedValue as unknown as AttachmentPickerContextValue}\n >\n {children}\n </AttachmentPickerContext.Provider>\n );\n};\n\nexport const useAttachmentPickerContext = () =>\n useContext(AttachmentPickerContext) as unknown as AttachmentPickerContextValue;\n\nexport const withAttachmentPickerContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n Component: React.ComponentType<StreamChatGenerics>,\n): React.FC<Omit<StreamChatGenerics, keyof AttachmentPickerContextValue>> => {\n const WithAttachmentPickerContextComponent = (\n props: Omit<StreamChatGenerics, keyof AttachmentPickerContextValue>,\n ) => {\n const attachmentPickerContext = useAttachmentPickerContext();\n\n return <Component {...(props as StreamChatGenerics)} {...attachmentPickerContext} />;\n };\n WithAttachmentPickerContextComponent.displayName = `WithAttachmentPickerContext${getDisplayName(\n Component as React.ComponentType,\n )}`;\n return WithAttachmentPickerContextComponent;\n};\n"]}
@@ -1 +1 @@
1
- {"version":3,"sources":["ChannelContext.tsx"],"names":["ChannelContext","React","createContext","ChannelProvider","children","value","useChannelContext","withChannelContext","Component","WithChannelContextComponent","props","channelContext","displayName"],"mappings":";;;;;;;;;;;AAAA;;AAOA;;;;;;;;;AAkKO,IAAMA,cAAc,GAAGC,kBAAMC,aAAN,CAAoB,EAApB,CAAvB;;;;AAEA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB;AAAA,MAG7BC,QAH6B,QAG7BA,QAH6B;AAAA,MAI7BC,KAJ6B,QAI7BA,KAJ6B;AAAA,SAQ7B,gCAAC,cAAD,CAAgB,QAAhB;AAAyB,IAAA,KAAK,EAAEA,KAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGD,QADH,CAR6B;AAAA,CAAxB;;;;AAaA,IAAME,iBAAiB,GAAG,SAApBA,iBAAoB;AAAA,SAE1B,uBAAWN,cAAX,CAF0B;AAAA,CAA1B;;;;AASA,IAAMO,kBAAkB,GAAG,SAArBA,kBAAqB,CAIhCC,SAJgC,EAKqC;AACrE,MAAMC,2BAA2B,GAAG,SAA9BA,2BAA8B,CAClCC,KADkC,EAE/B;AACH,QAAMC,cAAc,GAAGL,iBAAiB,EAAxC;AAEA,WAAO,gCAAC,SAAD,gCAAgBI,KAAhB,EAAiCC,cAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAP;AACD,GAND;;AAOAF,EAAAA,2BAA2B,CAACG,WAA5B,0BAA+D,oCAAeJ,SAAf,CAA/D;AACA,SAAOC,2BAAP;AACD,CAfM","sourcesContent":["import React, { PropsWithChildren, useContext } from 'react';\n\nimport type { Channel, ChannelState } from 'stream-chat';\n\nimport type { EmptyStateProps } from '../../components/Indicators/EmptyStateIndicator';\nimport type { LoadingProps } from '../../components/Indicators/LoadingIndicator';\nimport type { DefaultStreamChatGenerics, UnknownType } from '../../types/types';\nimport { getDisplayName } from '../utils/getDisplayName';\n\nexport type ChannelContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Instance of channel object from stream-chat package.\n *\n * Please check the docs around how to create or query channel - https://getstream.io/chat/docs/javascript/creating_channels/?language=javascript\n *\n * ```\n * import { StreamChat, Channel } from 'stream-chat';\n * import { Chat, Channel} from 'stream-chat-react-native';\n *\n * const client = StreamChat.getInstance('api_key');\n * await client.connectUser('user_id', 'user_token');\n * const channel = client.channel('messaging', 'channel_id');\n * await channel.watch();\n *\n * <Chat client={client}>\n * <Channel channel={channel}>\n * </Channel>\n * </Chat>\n * ```\n *\n * @overrideType Channel\n */\n channel: Channel<StreamChatGenerics>;\n /**\n * Custom UI component to display empty state when channel has no messages.\n *\n * **Default** [EmptyStateIndicator](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/Indicators/EmptyStateIndicator.tsx)\n */\n EmptyStateIndicator: React.ComponentType<EmptyStateProps>;\n /**\n * When set to true, reactions will be limited to 1 per user. If user selects another reaction\n * then his previous reaction will be removed and replaced with new one.\n *\n * This is similar to reaction UX on [iMessage application](https://en.wikipedia.org/wiki/IMessage).\n */\n enforceUniqueReaction: boolean;\n error: boolean | Error;\n /**\n * When set to false, it will disable giphy command on MessageInput component.\n */\n giphyEnabled: boolean;\n /**\n * Hide inline date separators on channel\n */\n hideDateSeparators: boolean;\n hideStickyDateHeader: boolean;\n /**\n * Returns true if the current user has admin privileges\n */\n isAdmin: boolean;\n /**\n * Returns true if the current user is a moderator\n */\n isModerator: boolean;\n /**\n * Returns true if the current user is a owner\n */\n isOwner: boolean;\n loadChannelAtMessage: ({\n after,\n before,\n messageId,\n }: {\n after?: number;\n before?: number;\n messageId?: string;\n }) => Promise<void>;\n loading: boolean;\n /**\n * Custom loading indicator to override the Stream default\n */\n LoadingIndicator: React.ComponentType<LoadingProps>;\n markRead: () => void;\n /**\n *\n * ```json\n * {\n * \"thierry-123\": {\n * \"id\": \"thierry-123\",\n * \"role\": \"user\",\n * \"created_at\": \"2019-04-03T14:42:47.087869Z\",\n * \"updated_at\": \"2019-04-16T09:20:03.982283Z\",\n * \"last_active\": \"2019-04-16T11:23:51.168113408+02:00\",\n * \"online\": true\n * },\n * \"vishal-123\": {\n * \"id\": \"vishal-123\",\n * \"role\": \"user\",\n * \"created_at\": \"2019-05-03T14:42:47.087869Z\",\n * \"updated_at\": \"2019-05-16T09:20:03.982283Z\",\n * \"last_active\": \"2019-06-16T11:23:51.168113408+02:00\",\n * \"online\": false\n * }\n * }\n * ```\n */\n members: ChannelState<StreamChatGenerics>['members'];\n /**\n * Custom network down indicator to override the Stream default\n */\n NetworkDownIndicator: React.ComponentType;\n read: ChannelState<StreamChatGenerics>['read'];\n reloadChannel: () => Promise<void>;\n /**\n * When true, messagelist will be scrolled to first unread message, when opened.\n */\n scrollToFirstUnreadThreshold: number;\n setLastRead: React.Dispatch<React.SetStateAction<Date | undefined>>;\n setTargetedMessage: (messageId: string) => void;\n /**\n *\n * ```json\n * {\n * \"thierry-123\": {\n * \"id\": \"thierry-123\",\n * \"role\": \"user\",\n * \"created_at\": \"2019-04-03T14:42:47.087869Z\",\n * \"updated_at\": \"2019-04-16T09:20:03.982283Z\",\n * \"last_active\": \"2019-04-16T11:23:51.168113408+02:00\",\n * \"online\": true\n * },\n * \"vishal-123\": {\n * \"id\": \"vishal-123\",\n * \"role\": \"user\",\n * \"created_at\": \"2019-05-03T14:42:47.087869Z\",\n * \"updated_at\": \"2019-05-16T09:20:03.982283Z\",\n * \"last_active\": \"2019-06-16T11:23:51.168113408+02:00\",\n * \"online\": false\n * }\n * }\n * ```\n */\n watchers: ChannelState<StreamChatGenerics>['watchers'];\n disabled?: boolean;\n enableMessageGroupingByUser?: boolean;\n isChannelActive?: boolean;\n lastRead?: Date;\n /**\n * Maximum time in milliseconds that should occur between messages\n * to still consider them grouped together\n */\n maxTimeBetweenGroupedMessages?: number;\n /**\n * Custom UI component for sticky header of channel.\n *\n * **Default** [DateHeader](https://github.com/GetStream/stream-chat-react-native/blob/master/package/src/components/MessageList/DateHeader.tsx)\n */\n StickyHeader?: React.ComponentType<{ dateString: string }>;\n /**\n * Id of message, around which Channel/MessageList gets loaded when opened.\n * You will see a highlighted background for targetted message, when opened.\n */\n targetedMessage?: string;\n threadList?: boolean;\n watcherCount?: ChannelState<StreamChatGenerics>['watcher_count'];\n};\n\nexport const ChannelContext = React.createContext({} as ChannelContextValue);\n\nexport const ChannelProvider = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n children,\n value,\n}: PropsWithChildren<{\n value: ChannelContextValue<StreamChatGenerics>;\n}>) => (\n <ChannelContext.Provider value={value as unknown as ChannelContextValue}>\n {children}\n </ChannelContext.Provider>\n);\n\nexport const useChannelContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => useContext(ChannelContext) as unknown as ChannelContextValue<StreamChatGenerics>;\n\n/**\n * Typescript currently does not support partial inference so if ChatContext\n * typing is desired while using the HOC withChannelContext the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withChannelContext = <\n P extends UnknownType,\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n Component: React.ComponentType<P>,\n): React.FC<Omit<P, keyof ChannelContextValue<StreamChatGenerics>>> => {\n const WithChannelContextComponent = (\n props: Omit<P, keyof ChannelContextValue<StreamChatGenerics>>,\n ) => {\n const channelContext = useChannelContext<StreamChatGenerics>();\n\n return <Component {...(props as P)} {...channelContext} />;\n };\n WithChannelContextComponent.displayName = `WithChannelContext${getDisplayName(Component)}`;\n return WithChannelContextComponent;\n};\n"]}
1
+ {"version":3,"sources":["ChannelContext.tsx"],"names":["ChannelContext","React","createContext","ChannelProvider","children","value","useChannelContext","withChannelContext","Component","WithChannelContextComponent","props","channelContext","displayName"],"mappings":";;;;;;;;;;;AAAA;;AAOA;;;;;;;;;AAkKO,IAAMA,cAAc,GAAGC,kBAAMC,aAAN,CAAoB,EAApB,CAAvB;;;;AAEA,IAAMC,eAAe,GAAG,SAAlBA,eAAkB;AAAA,MAG7BC,QAH6B,QAG7BA,QAH6B;AAAA,MAI7BC,KAJ6B,QAI7BA,KAJ6B;AAAA,SAQ7B,gCAAC,cAAD,CAAgB,QAAhB;AAAyB,IAAA,KAAK,EAAEA,KAAhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,KACGD,QADH,CAR6B;AAAA,CAAxB;;;;AAaA,IAAME,iBAAiB,GAAG,SAApBA,iBAAoB;AAAA,SAE1B,uBAAWN,cAAX,CAF0B;AAAA,CAA1B;;;;AASA,IAAMO,kBAAkB,GAAG,SAArBA,kBAAqB,CAIhCC,SAJgC,EAKqC;AACrE,MAAMC,2BAA2B,GAAG,SAA9BA,2BAA8B,CAClCC,KADkC,EAE/B;AACH,QAAMC,cAAc,GAAGL,iBAAiB,EAAxC;AAEA,WAAO,gCAAC,SAAD,gCAAgBI,KAAhB,EAAiCC,cAAjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAAP;AACD,GAND;;AAOAF,EAAAA,2BAA2B,CAACG,WAA5B,0BAA+D,oCAAeJ,SAAf,CAA/D;AACA,SAAOC,2BAAP;AACD,CAfM","sourcesContent":["import React, { PropsWithChildren, useContext } from 'react';\n\nimport type { Channel, ChannelState } from 'stream-chat';\n\nimport type { EmptyStateProps } from '../../components/Indicators/EmptyStateIndicator';\nimport type { LoadingProps } from '../../components/Indicators/LoadingIndicator';\nimport type { DefaultStreamChatGenerics, UnknownType } from '../../types/types';\nimport { getDisplayName } from '../utils/getDisplayName';\n\nexport type ChannelContextValue<\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n> = {\n /**\n * Instance of channel object from stream-chat package.\n *\n * Please check the docs around how to create or query channel - https://getstream.io/chat/docs/javascript/creating_channels/?language=javascript\n *\n * ```\n * import { StreamChat, Channel } from 'stream-chat';\n * import { Chat, Channel} from 'stream-chat-react-native';\n *\n * const client = StreamChat.getInstance('api_key');\n * await client.connectUser('user_id', 'user_token');\n * const channel = client.channel('messaging', 'channel_id');\n * await channel.watch();\n *\n * <Chat client={client}>\n * <Channel channel={channel}>\n * </Channel>\n * </Chat>\n * ```\n *\n * @overrideType Channel\n */\n channel: Channel<StreamChatGenerics>;\n /**\n * Custom UI component to display empty state when channel has no messages.\n *\n * **Default** [EmptyStateIndicator](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/Indicators/EmptyStateIndicator.tsx)\n */\n EmptyStateIndicator: React.ComponentType<EmptyStateProps>;\n /**\n * When set to true, reactions will be limited to 1 per user. If user selects another reaction\n * then his previous reaction will be removed and replaced with new one.\n *\n * This is similar to reaction UX on [iMessage application](https://en.wikipedia.org/wiki/IMessage).\n */\n enforceUniqueReaction: boolean;\n error: boolean | Error;\n /**\n * When set to false, it will disable giphy command on MessageInput component.\n */\n giphyEnabled: boolean;\n /**\n * Hide inline date separators on channel\n */\n hideDateSeparators: boolean;\n hideStickyDateHeader: boolean;\n /**\n * Returns true if the current user has admin privileges\n */\n isAdmin: boolean;\n /**\n * Returns true if the current user is a moderator\n */\n isModerator: boolean;\n /**\n * Returns true if the current user is a owner\n */\n isOwner: boolean;\n loadChannelAtMessage: ({\n after,\n before,\n messageId,\n }: {\n after?: number;\n before?: number;\n messageId?: string;\n }) => Promise<void>;\n loading: boolean;\n /**\n * Custom loading indicator to override the Stream default\n */\n LoadingIndicator: React.ComponentType<LoadingProps>;\n markRead: () => void;\n /**\n *\n * ```json\n * {\n * \"thierry-123\": {\n * \"id\": \"thierry-123\",\n * \"role\": \"user\",\n * \"created_at\": \"2019-04-03T14:42:47.087869Z\",\n * \"updated_at\": \"2019-04-16T09:20:03.982283Z\",\n * \"last_active\": \"2019-04-16T11:23:51.168113408+02:00\",\n * \"online\": true\n * },\n * \"vishal-123\": {\n * \"id\": \"vishal-123\",\n * \"role\": \"user\",\n * \"created_at\": \"2019-05-03T14:42:47.087869Z\",\n * \"updated_at\": \"2019-05-16T09:20:03.982283Z\",\n * \"last_active\": \"2019-06-16T11:23:51.168113408+02:00\",\n * \"online\": false\n * }\n * }\n * ```\n */\n members: ChannelState<StreamChatGenerics>['members'];\n /**\n * Custom network down indicator to override the Stream default\n */\n NetworkDownIndicator: React.ComponentType;\n read: ChannelState<StreamChatGenerics>['read'];\n reloadChannel: () => Promise<void>;\n /**\n * When true, messagelist will be scrolled to first unread message, when opened.\n */\n scrollToFirstUnreadThreshold: number;\n setLastRead: React.Dispatch<React.SetStateAction<Date | undefined>>;\n setTargetedMessage: (messageId: string) => void;\n /**\n *\n * ```json\n * {\n * \"thierry-123\": {\n * \"id\": \"thierry-123\",\n * \"role\": \"user\",\n * \"created_at\": \"2019-04-03T14:42:47.087869Z\",\n * \"updated_at\": \"2019-04-16T09:20:03.982283Z\",\n * \"last_active\": \"2019-04-16T11:23:51.168113408+02:00\",\n * \"online\": true\n * },\n * \"vishal-123\": {\n * \"id\": \"vishal-123\",\n * \"role\": \"user\",\n * \"created_at\": \"2019-05-03T14:42:47.087869Z\",\n * \"updated_at\": \"2019-05-16T09:20:03.982283Z\",\n * \"last_active\": \"2019-06-16T11:23:51.168113408+02:00\",\n * \"online\": false\n * }\n * }\n * ```\n */\n watchers: ChannelState<StreamChatGenerics>['watchers'];\n disabled?: boolean;\n enableMessageGroupingByUser?: boolean;\n isChannelActive?: boolean;\n lastRead?: Date;\n /**\n * Maximum time in milliseconds that should occur between messages\n * to still consider them grouped together\n */\n maxTimeBetweenGroupedMessages?: number;\n /**\n * Custom UI component for sticky header of channel.\n *\n * **Default** [DateHeader](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageList/DateHeader.tsx)\n */\n StickyHeader?: React.ComponentType<{ dateString: string }>;\n /**\n * Id of message, around which Channel/MessageList gets loaded when opened.\n * You will see a highlighted background for targetted message, when opened.\n */\n targetedMessage?: string;\n threadList?: boolean;\n watcherCount?: ChannelState<StreamChatGenerics>['watcher_count'];\n};\n\nexport const ChannelContext = React.createContext({} as ChannelContextValue);\n\nexport const ChannelProvider = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>({\n children,\n value,\n}: PropsWithChildren<{\n value: ChannelContextValue<StreamChatGenerics>;\n}>) => (\n <ChannelContext.Provider value={value as unknown as ChannelContextValue}>\n {children}\n </ChannelContext.Provider>\n);\n\nexport const useChannelContext = <\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>() => useContext(ChannelContext) as unknown as ChannelContextValue<StreamChatGenerics>;\n\n/**\n * Typescript currently does not support partial inference so if ChatContext\n * typing is desired while using the HOC withChannelContext the Props for the\n * wrapped component must be provided as the first generic.\n */\nexport const withChannelContext = <\n P extends UnknownType,\n StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,\n>(\n Component: React.ComponentType<P>,\n): React.FC<Omit<P, keyof ChannelContextValue<StreamChatGenerics>>> => {\n const WithChannelContextComponent = (\n props: Omit<P, keyof ChannelContextValue<StreamChatGenerics>>,\n ) => {\n const channelContext = useChannelContext<StreamChatGenerics>();\n\n return <Component {...(props as P)} {...channelContext} />;\n };\n WithChannelContextComponent.displayName = `WithChannelContext${getDisplayName(Component)}`;\n return WithChannelContextComponent;\n};\n"]}