stream-chat-react-native-core 5.34.1-beta.4 → 5.35.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (345) hide show
  1. package/lib/commonjs/components/Attachment/Attachment.js +5 -4
  2. package/lib/commonjs/components/Attachment/Attachment.js.map +1 -1
  3. package/lib/commonjs/components/Attachment/Card.js +2 -1
  4. package/lib/commonjs/components/Attachment/Card.js.map +1 -1
  5. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js +2 -1
  6. package/lib/commonjs/components/Attachment/FileAttachmentGroup.js.map +1 -1
  7. package/lib/commonjs/components/Attachment/Gallery.js +3 -2
  8. package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
  9. package/lib/commonjs/components/Attachment/Giphy.js +2 -3
  10. package/lib/commonjs/components/Attachment/Giphy.js.map +1 -1
  11. package/lib/commonjs/components/Attachment/utils/getAspectRatio.js +2 -1
  12. package/lib/commonjs/components/Attachment/utils/getAspectRatio.js.map +1 -1
  13. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +14 -9
  14. package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  15. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerIOSSelectMorePhotos.js +1 -0
  16. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerIOSSelectMorePhotos.js.map +1 -1
  17. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js +4 -11
  18. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
  19. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js +6 -57
  20. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js.map +1 -1
  21. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteInput.js +1 -1
  22. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionCommandIcon.js +2 -3
  23. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionCommandIcon.js.map +1 -1
  24. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js +2 -1
  25. package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js.map +1 -1
  26. package/lib/commonjs/components/Channel/Channel.js +5 -2
  27. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  28. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js +2 -0
  29. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  30. package/lib/commonjs/components/ImageGallery/ImageGallery.js +4 -3
  31. package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
  32. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryImage.js +3 -3
  33. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryImage.js.map +1 -1
  34. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js +5 -5
  35. package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -1
  36. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js +6 -5
  37. package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  38. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js +11 -11
  39. package/lib/commonjs/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -1
  40. package/lib/commonjs/components/ImageGallery/components/ImageGrid.js +2 -1
  41. package/lib/commonjs/components/ImageGallery/components/ImageGrid.js.map +1 -1
  42. package/lib/commonjs/components/Message/Message.js +8 -7
  43. package/lib/commonjs/components/Message/Message.js.map +1 -1
  44. package/lib/commonjs/components/MessageInput/AttachButton.js +67 -9
  45. package/lib/commonjs/components/MessageInput/AttachButton.js.map +1 -1
  46. package/lib/commonjs/components/MessageInput/CommandsButton.js +3 -2
  47. package/lib/commonjs/components/MessageInput/CommandsButton.js.map +1 -1
  48. package/lib/commonjs/components/MessageInput/FileUploadPreview.js +1 -11
  49. package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
  50. package/lib/commonjs/components/MessageInput/InputButtons.js +2 -5
  51. package/lib/commonjs/components/MessageInput/InputButtons.js.map +1 -1
  52. package/lib/commonjs/components/MessageInput/MessageInput.js +27 -22
  53. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  54. package/lib/commonjs/components/MessageInput/components/InputGiphySearch.js +5 -6
  55. package/lib/commonjs/components/MessageInput/components/InputGiphySearch.js.map +1 -1
  56. package/lib/commonjs/components/MessageInput/components/NativeAttachmentPicker.js +157 -0
  57. package/lib/commonjs/components/MessageInput/components/NativeAttachmentPicker.js.map +1 -0
  58. package/lib/commonjs/components/MessageInput/hooks/useAudioController.js +2 -1
  59. package/lib/commonjs/components/MessageInput/hooks/useAudioController.js.map +1 -1
  60. package/lib/commonjs/components/MessageList/MessageList.js +2 -1
  61. package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
  62. package/lib/commonjs/components/Reply/Reply.js +19 -18
  63. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  64. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +267 -181
  65. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  66. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +6 -0
  67. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  68. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js +6 -5
  69. package/lib/commonjs/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  70. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +3 -2
  71. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  72. package/lib/commonjs/contexts/themeContext/utils/theme.js +5 -0
  73. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  74. package/lib/commonjs/i18n/en.json +1 -0
  75. package/lib/commonjs/i18n/es.json +1 -0
  76. package/lib/commonjs/i18n/fr.json +1 -0
  77. package/lib/commonjs/i18n/he.json +1 -0
  78. package/lib/commonjs/i18n/hi.json +1 -0
  79. package/lib/commonjs/i18n/it.json +1 -0
  80. package/lib/commonjs/i18n/ja.json +1 -0
  81. package/lib/commonjs/i18n/ko.json +1 -0
  82. package/lib/commonjs/i18n/nl.json +1 -0
  83. package/lib/commonjs/i18n/pt-br.json +1 -0
  84. package/lib/commonjs/i18n/ru.json +1 -0
  85. package/lib/commonjs/i18n/tr.json +1 -0
  86. package/lib/commonjs/icons/Attach.js +29 -6
  87. package/lib/commonjs/icons/Attach.js.map +1 -1
  88. package/lib/commonjs/icons/GiphyLightning.js +31 -0
  89. package/lib/commonjs/icons/GiphyLightning.js.map +1 -0
  90. package/lib/commonjs/icons/Lightning.js +18 -6
  91. package/lib/commonjs/icons/Lightning.js.map +1 -1
  92. package/lib/commonjs/icons/index.js +11 -0
  93. package/lib/commonjs/icons/index.js.map +1 -1
  94. package/lib/commonjs/native.js +14 -5
  95. package/lib/commonjs/native.js.map +1 -1
  96. package/lib/commonjs/types/types.js +12 -0
  97. package/lib/commonjs/types/types.js.map +1 -1
  98. package/lib/commonjs/utils/utils.js +13 -1
  99. package/lib/commonjs/utils/utils.js.map +1 -1
  100. package/lib/commonjs/version.json +1 -1
  101. package/lib/module/components/Attachment/Attachment.js +5 -4
  102. package/lib/module/components/Attachment/Attachment.js.map +1 -1
  103. package/lib/module/components/Attachment/Card.js +2 -1
  104. package/lib/module/components/Attachment/Card.js.map +1 -1
  105. package/lib/module/components/Attachment/FileAttachmentGroup.js +2 -1
  106. package/lib/module/components/Attachment/FileAttachmentGroup.js.map +1 -1
  107. package/lib/module/components/Attachment/Gallery.js +3 -2
  108. package/lib/module/components/Attachment/Gallery.js.map +1 -1
  109. package/lib/module/components/Attachment/Giphy.js +2 -3
  110. package/lib/module/components/Attachment/Giphy.js.map +1 -1
  111. package/lib/module/components/Attachment/utils/getAspectRatio.js +2 -1
  112. package/lib/module/components/Attachment/utils/getAspectRatio.js.map +1 -1
  113. package/lib/module/components/AttachmentPicker/AttachmentPicker.js +14 -9
  114. package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
  115. package/lib/module/components/AttachmentPicker/components/AttachmentPickerIOSSelectMorePhotos.js +1 -0
  116. package/lib/module/components/AttachmentPicker/components/AttachmentPickerIOSSelectMorePhotos.js.map +1 -1
  117. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js +4 -11
  118. package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
  119. package/lib/module/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js +6 -57
  120. package/lib/module/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js.map +1 -1
  121. package/lib/module/components/AutoCompleteInput/AutoCompleteInput.js +1 -1
  122. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionCommandIcon.js +2 -3
  123. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionCommandIcon.js.map +1 -1
  124. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js +2 -1
  125. package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionHeader.js.map +1 -1
  126. package/lib/module/components/Channel/Channel.js +5 -2
  127. package/lib/module/components/Channel/Channel.js.map +1 -1
  128. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js +2 -0
  129. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  130. package/lib/module/components/ImageGallery/ImageGallery.js +4 -3
  131. package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
  132. package/lib/module/components/ImageGallery/components/AnimatedGalleryImage.js +3 -3
  133. package/lib/module/components/ImageGallery/components/AnimatedGalleryImage.js.map +1 -1
  134. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js +5 -5
  135. package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -1
  136. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js +6 -5
  137. package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
  138. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js +11 -11
  139. package/lib/module/components/ImageGallery/components/ImageGalleryVideoControl.js.map +1 -1
  140. package/lib/module/components/ImageGallery/components/ImageGrid.js +2 -1
  141. package/lib/module/components/ImageGallery/components/ImageGrid.js.map +1 -1
  142. package/lib/module/components/Message/Message.js +8 -7
  143. package/lib/module/components/Message/Message.js.map +1 -1
  144. package/lib/module/components/MessageInput/AttachButton.js +67 -9
  145. package/lib/module/components/MessageInput/AttachButton.js.map +1 -1
  146. package/lib/module/components/MessageInput/CommandsButton.js +3 -2
  147. package/lib/module/components/MessageInput/CommandsButton.js.map +1 -1
  148. package/lib/module/components/MessageInput/FileUploadPreview.js +1 -11
  149. package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
  150. package/lib/module/components/MessageInput/InputButtons.js +2 -5
  151. package/lib/module/components/MessageInput/InputButtons.js.map +1 -1
  152. package/lib/module/components/MessageInput/MessageInput.js +27 -22
  153. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  154. package/lib/module/components/MessageInput/components/InputGiphySearch.js +5 -6
  155. package/lib/module/components/MessageInput/components/InputGiphySearch.js.map +1 -1
  156. package/lib/module/components/MessageInput/components/NativeAttachmentPicker.js +157 -0
  157. package/lib/module/components/MessageInput/components/NativeAttachmentPicker.js.map +1 -0
  158. package/lib/module/components/MessageInput/hooks/useAudioController.js +2 -1
  159. package/lib/module/components/MessageInput/hooks/useAudioController.js.map +1 -1
  160. package/lib/module/components/MessageList/MessageList.js +2 -1
  161. package/lib/module/components/MessageList/MessageList.js.map +1 -1
  162. package/lib/module/components/Reply/Reply.js +19 -18
  163. package/lib/module/components/Reply/Reply.js.map +1 -1
  164. package/lib/module/contexts/messageInputContext/MessageInputContext.js +267 -181
  165. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  166. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +6 -0
  167. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  168. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js +6 -5
  169. package/lib/module/contexts/messageInputContext/hooks/useMessageDetailsForState.js.map +1 -1
  170. package/lib/module/contexts/overlayContext/OverlayProvider.js +3 -2
  171. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  172. package/lib/module/contexts/themeContext/utils/theme.js +5 -0
  173. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  174. package/lib/module/i18n/en.json +1 -0
  175. package/lib/module/i18n/es.json +1 -0
  176. package/lib/module/i18n/fr.json +1 -0
  177. package/lib/module/i18n/he.json +1 -0
  178. package/lib/module/i18n/hi.json +1 -0
  179. package/lib/module/i18n/it.json +1 -0
  180. package/lib/module/i18n/ja.json +1 -0
  181. package/lib/module/i18n/ko.json +1 -0
  182. package/lib/module/i18n/nl.json +1 -0
  183. package/lib/module/i18n/pt-br.json +1 -0
  184. package/lib/module/i18n/ru.json +1 -0
  185. package/lib/module/i18n/tr.json +1 -0
  186. package/lib/module/icons/Attach.js +29 -6
  187. package/lib/module/icons/Attach.js.map +1 -1
  188. package/lib/module/icons/GiphyLightning.js +31 -0
  189. package/lib/module/icons/GiphyLightning.js.map +1 -0
  190. package/lib/module/icons/Lightning.js +18 -6
  191. package/lib/module/icons/Lightning.js.map +1 -1
  192. package/lib/module/icons/index.js +11 -0
  193. package/lib/module/icons/index.js.map +1 -1
  194. package/lib/module/native.js +14 -5
  195. package/lib/module/native.js.map +1 -1
  196. package/lib/module/types/types.js +12 -0
  197. package/lib/module/types/types.js.map +1 -1
  198. package/lib/module/utils/utils.js +13 -1
  199. package/lib/module/utils/utils.js.map +1 -1
  200. package/lib/module/version.json +1 -1
  201. package/lib/typescript/components/Attachment/Attachment.d.ts +1 -1
  202. package/lib/typescript/components/Attachment/Attachment.d.ts.map +1 -1
  203. package/lib/typescript/components/Attachment/Card.d.ts +1 -1
  204. package/lib/typescript/components/Attachment/Card.d.ts.map +1 -1
  205. package/lib/typescript/components/Attachment/FileAttachmentGroup.d.ts +1 -1
  206. package/lib/typescript/components/Attachment/FileAttachmentGroup.d.ts.map +1 -1
  207. package/lib/typescript/components/Attachment/Gallery.d.ts +1 -1
  208. package/lib/typescript/components/Attachment/Gallery.d.ts.map +1 -1
  209. package/lib/typescript/components/Attachment/utils/getAspectRatio.d.ts +1 -1
  210. package/lib/typescript/components/Attachment/utils/getAspectRatio.d.ts.map +1 -1
  211. package/lib/typescript/components/AttachmentPicker/AttachmentPicker.d.ts.map +1 -1
  212. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerIOSSelectMorePhotos.d.ts +1 -1
  213. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerIOSSelectMorePhotos.d.ts.map +1 -1
  214. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerItem.d.ts.map +1 -1
  215. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerSelectionBar.d.ts.map +1 -1
  216. package/lib/typescript/components/Channel/Channel.d.ts +1 -1
  217. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  218. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts +1 -1
  219. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts.map +1 -1
  220. package/lib/typescript/components/ImageGallery/ImageGallery.d.ts +1 -1
  221. package/lib/typescript/components/ImageGallery/ImageGallery.d.ts.map +1 -1
  222. package/lib/typescript/components/ImageGallery/components/AnimatedGalleryVideo.d.ts.map +1 -1
  223. package/lib/typescript/components/ImageGallery/components/ImageGalleryFooter.d.ts +1 -1
  224. package/lib/typescript/components/ImageGallery/components/ImageGalleryFooter.d.ts.map +1 -1
  225. package/lib/typescript/components/ImageGallery/components/ImageGalleryVideoControl.d.ts.map +1 -1
  226. package/lib/typescript/components/ImageGallery/components/ImageGrid.d.ts +1 -1
  227. package/lib/typescript/components/ImageGallery/components/ImageGrid.d.ts.map +1 -1
  228. package/lib/typescript/components/Message/Message.d.ts +1 -1
  229. package/lib/typescript/components/Message/Message.d.ts.map +1 -1
  230. package/lib/typescript/components/MessageInput/AttachButton.d.ts +3 -1
  231. package/lib/typescript/components/MessageInput/AttachButton.d.ts.map +1 -1
  232. package/lib/typescript/components/MessageInput/CommandsButton.d.ts.map +1 -1
  233. package/lib/typescript/components/MessageInput/FileUploadPreview.d.ts.map +1 -1
  234. package/lib/typescript/components/MessageInput/InputButtons.d.ts.map +1 -1
  235. package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
  236. package/lib/typescript/components/MessageInput/MessageInput.d.ts.map +1 -1
  237. package/lib/typescript/components/MessageInput/components/NativeAttachmentPicker.d.ts +9 -0
  238. package/lib/typescript/components/MessageInput/components/NativeAttachmentPicker.d.ts.map +1 -0
  239. package/lib/typescript/components/MessageList/MessageList.d.ts +1 -1
  240. package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
  241. package/lib/typescript/components/Reply/Reply.d.ts +1 -1
  242. package/lib/typescript/components/Reply/Reply.d.ts.map +1 -1
  243. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +15 -3
  244. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts.map +1 -1
  245. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts +1 -1
  246. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  247. package/lib/typescript/contexts/messageInputContext/hooks/useMessageDetailsForState.d.ts +1 -1
  248. package/lib/typescript/contexts/messageInputContext/hooks/useMessageDetailsForState.d.ts.map +1 -1
  249. package/lib/typescript/contexts/overlayContext/OverlayProvider.d.ts.map +1 -1
  250. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +5 -0
  251. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  252. package/lib/typescript/i18n/en.json +1 -0
  253. package/lib/typescript/i18n/es.json +1 -0
  254. package/lib/typescript/i18n/fr.json +1 -0
  255. package/lib/typescript/i18n/he.json +1 -0
  256. package/lib/typescript/i18n/hi.json +1 -0
  257. package/lib/typescript/i18n/it.json +1 -0
  258. package/lib/typescript/i18n/ja.json +1 -0
  259. package/lib/typescript/i18n/ko.json +1 -0
  260. package/lib/typescript/i18n/nl.json +1 -0
  261. package/lib/typescript/i18n/pt-br.json +1 -0
  262. package/lib/typescript/i18n/ru.json +1 -0
  263. package/lib/typescript/i18n/tr.json +1 -0
  264. package/lib/typescript/icons/Attach.d.ts +5 -1
  265. package/lib/typescript/icons/Attach.d.ts.map +1 -1
  266. package/lib/typescript/icons/GiphyLightning.d.ts +8 -0
  267. package/lib/typescript/icons/GiphyLightning.d.ts.map +1 -0
  268. package/lib/typescript/icons/Lightning.d.ts +5 -1
  269. package/lib/typescript/icons/Lightning.d.ts.map +1 -1
  270. package/lib/typescript/icons/index.d.ts +1 -0
  271. package/lib/typescript/icons/index.d.ts.map +1 -1
  272. package/lib/typescript/native.d.ts +13 -5
  273. package/lib/typescript/native.d.ts.map +1 -1
  274. package/lib/typescript/types/types.d.ts +10 -1
  275. package/lib/typescript/types/types.d.ts.map +1 -1
  276. package/lib/typescript/utils/i18n/Streami18n.d.ts +1 -0
  277. package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
  278. package/lib/typescript/utils/utils.d.ts +6 -0
  279. package/lib/typescript/utils/utils.d.ts.map +1 -1
  280. package/package.json +1 -1
  281. package/src/components/Attachment/Attachment.tsx +7 -7
  282. package/src/components/Attachment/Card.tsx +2 -2
  283. package/src/components/Attachment/FileAttachmentGroup.tsx +2 -2
  284. package/src/components/Attachment/Gallery.tsx +3 -3
  285. package/src/components/Attachment/Giphy.tsx +1 -1
  286. package/src/components/Attachment/utils/getAspectRatio.ts +2 -2
  287. package/src/components/AttachmentPicker/AttachmentPicker.tsx +6 -0
  288. package/src/components/AttachmentPicker/components/AttachmentPickerIOSSelectMorePhotos.tsx +3 -0
  289. package/src/components/AttachmentPicker/components/AttachmentPickerItem.tsx +6 -15
  290. package/src/components/AttachmentPicker/components/AttachmentPickerSelectionBar.tsx +6 -30
  291. package/src/components/AutoCompleteInput/AutoCompleteInput.tsx +1 -1
  292. package/src/components/AutoCompleteInput/AutoCompleteSuggestionCommandIcon.tsx +1 -1
  293. package/src/components/AutoCompleteInput/AutoCompleteSuggestionHeader.tsx +1 -1
  294. package/src/components/Channel/Channel.tsx +8 -6
  295. package/src/components/Channel/hooks/useCreateInputMessageInputContext.ts +2 -0
  296. package/src/components/ImageGallery/ImageGallery.tsx +6 -6
  297. package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +5 -4
  298. package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +1 -0
  299. package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +1 -0
  300. package/src/components/ImageGallery/__tests__/ImageGalleryVideoControl.test.tsx +2 -2
  301. package/src/components/ImageGallery/components/AnimatedGalleryImage.tsx +3 -3
  302. package/src/components/ImageGallery/components/AnimatedGalleryVideo.tsx +5 -4
  303. package/src/components/ImageGallery/components/ImageGalleryFooter.tsx +4 -4
  304. package/src/components/ImageGallery/components/ImageGalleryVideoControl.tsx +8 -17
  305. package/src/components/ImageGallery/components/ImageGrid.tsx +2 -2
  306. package/src/components/Message/Message.tsx +12 -8
  307. package/src/components/MessageInput/AttachButton.tsx +74 -8
  308. package/src/components/MessageInput/CommandsButton.tsx +2 -1
  309. package/src/components/MessageInput/FileUploadPreview.tsx +8 -17
  310. package/src/components/MessageInput/InputButtons.tsx +1 -2
  311. package/src/components/MessageInput/MessageInput.tsx +43 -30
  312. package/src/components/MessageInput/__tests__/FileUploadPreview.test.js +1 -0
  313. package/src/components/MessageInput/__tests__/__snapshots__/AttachButton.test.js.snap +139 -45
  314. package/src/components/MessageInput/components/InputGiphySearch.tsx +3 -3
  315. package/src/components/MessageInput/components/NativeAttachmentPicker.tsx +179 -0
  316. package/src/components/MessageInput/hooks/useAudioController.tsx +2 -2
  317. package/src/components/MessageList/MessageList.tsx +2 -2
  318. package/src/components/Reply/Reply.tsx +31 -29
  319. package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +86 -37
  320. package/src/contexts/messageInputContext/MessageInputContext.tsx +94 -23
  321. package/src/contexts/messageInputContext/__tests__/MessageInputContext.test.tsx +1 -38
  322. package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +6 -1
  323. package/src/contexts/messageInputContext/hooks/useMessageDetailsForState.ts +11 -6
  324. package/src/contexts/overlayContext/OverlayProvider.tsx +4 -1
  325. package/src/contexts/themeContext/utils/theme.ts +10 -0
  326. package/src/i18n/en.json +1 -0
  327. package/src/i18n/es.json +1 -0
  328. package/src/i18n/fr.json +1 -0
  329. package/src/i18n/he.json +1 -0
  330. package/src/i18n/hi.json +1 -0
  331. package/src/i18n/it.json +1 -0
  332. package/src/i18n/ja.json +1 -0
  333. package/src/i18n/ko.json +1 -0
  334. package/src/i18n/nl.json +1 -0
  335. package/src/i18n/pt-br.json +1 -0
  336. package/src/i18n/ru.json +1 -0
  337. package/src/i18n/tr.json +1 -0
  338. package/src/icons/Attach.tsx +22 -9
  339. package/src/icons/GiphyLightning.tsx +18 -0
  340. package/src/icons/Lightning.tsx +14 -5
  341. package/src/icons/index.ts +1 -0
  342. package/src/native.ts +28 -14
  343. package/src/types/types.ts +11 -1
  344. package/src/utils/utils.ts +20 -0
  345. package/src/version.json +1 -1
@@ -22,7 +22,7 @@ import {
22
22
  TranslationContextValue,
23
23
  useTranslationContext,
24
24
  } from '../../contexts/translationContext/TranslationContext';
25
- import type { DefaultStreamChatGenerics } from '../../types/types';
25
+ import { DefaultStreamChatGenerics, FileTypes } from '../../types/types';
26
26
  import { getResizedImageUrl } from '../../utils/getResizedImageUrl';
27
27
  import { getTrimmedAttachmentTitle } from '../../utils/getTrimmedAttachmentTitle';
28
28
  import { hasOnlyEmojis } from '../../utils/utils';
@@ -94,36 +94,36 @@ const getMessageType = <
94
94
  ) => {
95
95
  let messageType;
96
96
 
97
- const isLastAttachmentFile = lastAttachment.type === 'file';
97
+ const isLastAttachmentFile = lastAttachment.type === FileTypes.File;
98
98
 
99
- const isLastAttachmentAudio = lastAttachment.type === 'audio';
99
+ const isLastAttachmentAudio = lastAttachment.type === FileTypes.Audio;
100
100
 
101
- const isLastAttachmentVoiceRecording = lastAttachment.type === 'voiceRecording';
101
+ const isLastAttachmentVoiceRecording = lastAttachment.type === FileTypes.VoiceRecording;
102
102
 
103
- const isLastAttachmentVideo = lastAttachment.type === 'video';
103
+ const isLastAttachmentVideo = lastAttachment.type === FileTypes.Video;
104
104
 
105
105
  const isLastAttachmentGiphy =
106
- lastAttachment?.type === 'giphy' || lastAttachment?.type === 'imgur';
106
+ lastAttachment?.type === FileTypes.Giphy || lastAttachment?.type === FileTypes.Imgur;
107
107
 
108
108
  const isLastAttachmentImageOrGiphy =
109
- lastAttachment?.type === 'image' &&
109
+ lastAttachment?.type === FileTypes.Image &&
110
110
  !lastAttachment?.title_link &&
111
111
  !lastAttachment?.og_scrape_url;
112
112
 
113
113
  const isLastAttachmentImage = lastAttachment?.image_url || lastAttachment?.thumb_url;
114
114
 
115
115
  if (isLastAttachmentFile) {
116
- messageType = 'file';
116
+ messageType = FileTypes.File;
117
117
  } else if (isLastAttachmentVideo) {
118
- messageType = 'video';
118
+ messageType = FileTypes.Video;
119
119
  } else if (isLastAttachmentAudio) {
120
- messageType = 'audio';
120
+ messageType = FileTypes.Audio;
121
121
  } else if (isLastAttachmentVoiceRecording) {
122
- messageType = 'voiceRecording';
122
+ messageType = FileTypes.VoiceRecording;
123
123
  } else if (isLastAttachmentImageOrGiphy) {
124
- if (isLastAttachmentImage) messageType = 'image';
124
+ if (isLastAttachmentImage) messageType = FileTypes.Image;
125
125
  else messageType = undefined;
126
- } else if (isLastAttachmentGiphy) messageType = 'giphy';
126
+ } else if (isLastAttachmentGiphy) messageType = FileTypes.Giphy;
127
127
  else messageType = 'other';
128
128
 
129
129
  return messageType;
@@ -184,10 +184,10 @@ const ReplyWithContext = <
184
184
  const hasImage =
185
185
  !error &&
186
186
  lastAttachment &&
187
- messageType !== 'file' &&
188
- messageType !== 'video' &&
189
- messageType !== 'audio' &&
190
- messageType !== 'voiceRecording' &&
187
+ messageType !== FileTypes.File &&
188
+ messageType !== FileTypes.Video &&
189
+ messageType !== FileTypes.Audio &&
190
+ messageType !== FileTypes.VoiceRecording &&
191
191
  (lastAttachment.image_url || lastAttachment.thumb_url || lastAttachment.og_scrape_url);
192
192
 
193
193
  const onlyEmojis = !lastAttachment && emojiOnlyText;
@@ -209,7 +209,9 @@ const ReplyWithContext = <
209
209
  ]}
210
210
  >
211
211
  {!error && lastAttachment ? (
212
- messageType === 'file' || messageType === 'voiceRecording' || messageType === 'audio' ? (
212
+ messageType === FileTypes.File ||
213
+ messageType === FileTypes.Audio ||
214
+ messageType === FileTypes.VoiceRecording ? (
213
215
  <View
214
216
  style={[
215
217
  styles.fileAttachmentContainer,
@@ -241,7 +243,7 @@ const ReplyWithContext = <
241
243
  />
242
244
  ) : null
243
245
  ) : null}
244
- {messageType === 'video' && !lastAttachment.og_scrape_url ? (
246
+ {messageType === FileTypes.Video && !lastAttachment.og_scrape_url ? (
245
247
  <VideoThumbnail
246
248
  imageStyle={[styles.videoThumbnailImageStyle, videoThumbnailImageStyle]}
247
249
  style={[styles.videoThumbnailContainerStyle, videoThumbnailContainerStyle]}
@@ -264,13 +266,13 @@ const ReplyWithContext = <
264
266
  ? quotedMessage.text.length > 170
265
267
  ? `${quotedMessage.text.slice(0, 170)}...`
266
268
  : quotedMessage.text
267
- : messageType === 'image'
269
+ : messageType === FileTypes.Image
268
270
  ? t('Photo')
269
- : messageType === 'video'
271
+ : messageType === FileTypes.Video
270
272
  ? t('Video')
271
- : messageType === 'file' ||
272
- messageType === 'audio' ||
273
- messageType === 'voiceRecording'
273
+ : messageType === FileTypes.File ||
274
+ messageType === FileTypes.Audio ||
275
+ messageType === FileTypes.VoiceRecording
274
276
  ? trimmedLastAttachmentTitle || ''
275
277
  : '',
276
278
  }}
@@ -279,7 +281,7 @@ const ReplyWithContext = <
279
281
  textContainer: [
280
282
  {
281
283
  marginRight:
282
- hasImage || messageType === 'video'
284
+ hasImage || messageType === FileTypes.Video
283
285
  ? Number(
284
286
  stylesProp.imageAttachment?.height ||
285
287
  imageAttachment.height ||
@@ -290,9 +292,9 @@ const ReplyWithContext = <
290
292
  imageAttachment.marginLeft ||
291
293
  styles.imageAttachment.marginLeft,
292
294
  )
293
- : messageType === 'file' ||
294
- messageType === 'audio' ||
295
- messageType === 'voiceRecording'
295
+ : messageType === FileTypes.File ||
296
+ messageType === FileTypes.Audio ||
297
+ messageType === FileTypes.VoiceRecording
296
298
  ? attachmentSize +
297
299
  Number(
298
300
  stylesProp.fileAttachmentContainer?.paddingLeft ||
@@ -307,7 +309,7 @@ const ReplyWithContext = <
307
309
  ],
308
310
  }}
309
311
  />
310
- {messageType === 'audio' || messageType === 'voiceRecording' ? (
312
+ {messageType === FileTypes.Audio || messageType === FileTypes.VoiceRecording ? (
311
313
  <Text style={[styles.secondaryText, { color: grey }, secondaryText]}>
312
314
  {lastAttachment.duration
313
315
  ? dayjs.duration(lastAttachment.duration, 'second').format('mm:ss')
@@ -1701,6 +1701,7 @@ exports[`Thread should match thread snapshot 1`] = `
1701
1701
  onBlur={[Function]}
1702
1702
  onClick={[Function]}
1703
1703
  onFocus={[Function]}
1704
+ onLayout={[Function]}
1704
1705
  onResponderGrant={[Function]}
1705
1706
  onResponderMove={[Function]}
1706
1707
  onResponderRelease={[Function]}
@@ -1716,14 +1717,14 @@ exports[`Thread should match thread snapshot 1`] = `
1716
1717
  >
1717
1718
  <RNSVGSvgView
1718
1719
  align="xMidYMid"
1719
- bbHeight={24}
1720
- bbWidth={24}
1720
+ bbHeight={32}
1721
+ bbWidth={32}
1722
+ fill="#7A7A7A"
1721
1723
  focusable={false}
1722
- height={24}
1724
+ height={32}
1723
1725
  meetOrSlice={0}
1724
1726
  minX={0}
1725
1727
  minY={0}
1726
- pathFill="#7A7A7A"
1727
1728
  style={
1728
1729
  [
1729
1730
  {
@@ -1732,40 +1733,86 @@ exports[`Thread should match thread snapshot 1`] = `
1732
1733
  },
1733
1734
  {
1734
1735
  "flex": 0,
1735
- "height": 24,
1736
- "width": 24,
1736
+ "height": 32,
1737
+ "width": 32,
1737
1738
  },
1738
1739
  ]
1739
1740
  }
1740
- vbHeight={24}
1741
- vbWidth={24}
1742
- width={24}
1741
+ vbHeight={32}
1742
+ vbWidth={32}
1743
+ width={32}
1743
1744
  >
1744
1745
  <RNSVGGroup
1745
1746
  fill={
1746
1747
  {
1747
- "payload": 4278190080,
1748
+ "payload": 4286216826,
1748
1749
  "type": 0,
1749
1750
  }
1750
1751
  }
1752
+ propList={
1753
+ [
1754
+ "fill",
1755
+ ]
1756
+ }
1751
1757
  >
1752
- <RNSVGPath
1753
- clipRule={0}
1754
- d="M13.468 2.888a5.07 5.07 0 012.983.635 5.07 5.07 0 012.041 2.265c.45 1.01.546 2.254-.144 3.449l-4.5 7.794a3.232 3.232 0 01-1.427 1.294c-.757.342-1.696.367-2.671-.196-.975-.563-1.422-1.389-1.506-2.215a3.233 3.233 0 01.408-1.883l4-6.928a1 1 0 011.732 1l-4 6.928c-.087.15-.176.425-.15.682.02.196.105.447.516.684.41.237.671.185.85.105.236-.107.43-.32.516-.47l4.5-7.795c.31-.538.29-1.093.049-1.636a3.072 3.072 0 00-1.214-1.346 3.072 3.072 0 00-1.773-.378c-.591.062-1.082.322-1.392.86l-5 8.66c-.654 1.133-.286 3.3 1.964 4.598 2.25 1.3 4.31.535 4.964-.598l3.5-6.062a1 1 0 111.732 1l-3.5 6.062c-1.345 2.33-4.75 3.031-7.696 1.33-2.946-1.7-4.042-5-2.696-7.33l5-8.66c.69-1.195 1.815-1.733 2.914-1.85z"
1758
+ <RNSVGGroup
1759
+ clipPath="id"
1755
1760
  fill={
1756
1761
  {
1757
- "payload": 4286216826,
1762
+ "payload": 4278190080,
1758
1763
  "type": 0,
1759
1764
  }
1760
1765
  }
1761
- fillRule={0}
1762
- propList={
1763
- [
1764
- "fill",
1765
- "fillRule",
1766
- ]
1767
- }
1768
- />
1766
+ >
1767
+ <RNSVGPath
1768
+ d="M17.5245 9.33332L14.8579 9.33332L14.8579 14.6666L9.52453 14.6666L9.52453 17.3333L14.8579 17.3333L14.8579 22.6667L17.5245 22.6667L17.5245 17.3333L22.8579 17.3333L22.8579 14.6666L17.5245 14.6666L17.5245 9.33332ZM16.1912 2.66665C8.83119 2.66665 2.85786 8.63998 2.85786 16C2.85786 23.36 8.83119 29.3333 16.1912 29.3333C23.5512 29.3333 29.5245 23.36 29.5245 16C29.5245 8.63998 23.5512 2.66665 16.1912 2.66665ZM16.1912 26.6667C10.3112 26.6666 5.52453 21.88 5.52453 16C5.52453 10.12 10.3112 5.33332 16.1912 5.33332C22.0712 5.33332 26.8579 10.12 26.8579 16C26.8579 21.88 22.0712 26.6666 16.1912 26.6667Z"
1769
+ fill={
1770
+ {
1771
+ "payload": 4286216826,
1772
+ "type": 0,
1773
+ }
1774
+ }
1775
+ propList={
1776
+ [
1777
+ "fill",
1778
+ ]
1779
+ }
1780
+ />
1781
+ </RNSVGGroup>
1782
+ <RNSVGDefs>
1783
+ <RNSVGClipPath
1784
+ fill={
1785
+ {
1786
+ "payload": 4278190080,
1787
+ "type": 0,
1788
+ }
1789
+ }
1790
+ name="id"
1791
+ >
1792
+ <RNSVGRect
1793
+ fill={
1794
+ {
1795
+ "payload": 4278190080,
1796
+ "type": 0,
1797
+ }
1798
+ }
1799
+ height={32}
1800
+ matrix={
1801
+ [
1802
+ 1,
1803
+ 0,
1804
+ 0,
1805
+ 1,
1806
+ 0.191406,
1807
+ 0,
1808
+ ]
1809
+ }
1810
+ width={32}
1811
+ x={0}
1812
+ y={0}
1813
+ />
1814
+ </RNSVGClipPath>
1815
+ </RNSVGDefs>
1769
1816
  </RNSVGGroup>
1770
1817
  </RNSVGSvgView>
1771
1818
  </View>
@@ -1812,14 +1859,14 @@ exports[`Thread should match thread snapshot 1`] = `
1812
1859
  >
1813
1860
  <RNSVGSvgView
1814
1861
  align="xMidYMid"
1815
- bbHeight={24}
1816
- bbWidth={24}
1862
+ bbHeight={32}
1863
+ bbWidth={32}
1864
+ fill="#7A7A7A"
1817
1865
  focusable={false}
1818
- height={24}
1866
+ height={32}
1819
1867
  meetOrSlice={0}
1820
1868
  minX={0}
1821
1869
  minY={0}
1822
- pathFill="#7A7A7A"
1823
1870
  style={
1824
1871
  [
1825
1872
  {
@@ -1828,37 +1875,39 @@ exports[`Thread should match thread snapshot 1`] = `
1828
1875
  },
1829
1876
  {
1830
1877
  "flex": 0,
1831
- "height": 24,
1832
- "width": 24,
1878
+ "height": 32,
1879
+ "width": 32,
1833
1880
  },
1834
1881
  ]
1835
1882
  }
1836
- vbHeight={24}
1837
- vbWidth={24}
1838
- width={24}
1883
+ vbHeight={32}
1884
+ vbWidth={32}
1885
+ width={32}
1839
1886
  >
1840
1887
  <RNSVGGroup
1841
1888
  fill={
1842
1889
  {
1843
- "payload": 4278190080,
1890
+ "payload": 4286216826,
1844
1891
  "type": 0,
1845
1892
  }
1846
1893
  }
1894
+ propList={
1895
+ [
1896
+ "fill",
1897
+ ]
1898
+ }
1847
1899
  >
1848
1900
  <RNSVGPath
1849
- clipRule={0}
1850
- d="M11.636 4H16l-2.91 5.818H16L10.546 20l1.09-7.273H8L11.636 4z"
1901
+ d="M14.8522 28H13.5188L14.8522 18.6667H10.1855C9.01218 18.6667 9.74551 17.6667 9.77218 17.6267C11.4922 14.5867 14.0788 10.0533 17.5322 4H18.8655L17.5322 13.3333H22.2122C22.7455 13.3333 23.0388 13.5867 22.7455 14.2133C17.4788 23.4 14.8522 28 14.8522 28Z"
1851
1902
  fill={
1852
1903
  {
1853
1904
  "payload": 4286216826,
1854
1905
  "type": 0,
1855
1906
  }
1856
1907
  }
1857
- fillRule={0}
1858
1908
  propList={
1859
1909
  [
1860
1910
  "fill",
1861
- "fillRule",
1862
1911
  ]
1863
1912
  }
1864
1913
  />
@@ -1914,7 +1963,7 @@ exports[`Thread should match thread snapshot 1`] = `
1914
1963
  [
1915
1964
  {
1916
1965
  "flex": 1,
1917
- "fontSize": 14,
1966
+ "fontSize": 16,
1918
1967
  "includeFontPadding": false,
1919
1968
  "padding": 0,
1920
1969
  "paddingTop": 0,
@@ -1,7 +1,6 @@
1
1
  import type { LegacyRef } from 'react';
2
2
  import React, { PropsWithChildren, useContext, useEffect, useRef, useState } from 'react';
3
- import type { TextInput, TextInputProps } from 'react-native';
4
- import { Alert, Keyboard } from 'react-native';
3
+ import { Alert, Keyboard, Linking, TextInput, TextInputProps } from 'react-native';
5
4
 
6
5
  import uniq from 'lodash/uniq';
7
6
  import { lookup } from 'mime-types';
@@ -47,11 +46,12 @@ import type { SendButtonProps } from '../../components/MessageInput/SendButton';
47
46
  import type { UploadProgressIndicatorProps } from '../../components/MessageInput/UploadProgressIndicator';
48
47
  import type { MessageType } from '../../components/MessageList/hooks/useMessageList';
49
48
  import type { Emoji } from '../../emoji-data';
50
- import { pickDocument } from '../../native';
51
- import type {
49
+ import { pickDocument, pickImage, takePhoto } from '../../native';
50
+ import {
52
51
  Asset,
53
52
  DefaultStreamChatGenerics,
54
53
  File,
54
+ FileTypes,
55
55
  FileUpload,
56
56
  ImageUpload,
57
57
  UnknownType,
@@ -159,6 +159,10 @@ export type LocalMessageInputContext<
159
159
  openCommandsPicker: () => void;
160
160
  openFilePicker: () => void;
161
161
  openMentionsPicker: () => void;
162
+ /**
163
+ * Function for picking a photo from native image picker and uploading it.
164
+ */
165
+ pickAndUploadImageFromNativePicker: () => Promise<void>;
162
166
  pickFile: () => Promise<void>;
163
167
  /**
164
168
  * Function for removing a file from the upload preview
@@ -202,6 +206,10 @@ export type LocalMessageInputContext<
202
206
  setShowMoreOptions: React.Dispatch<React.SetStateAction<boolean>>;
203
207
  setText: React.Dispatch<React.SetStateAction<string>>;
204
208
  showMoreOptions: boolean;
209
+ /**
210
+ * Function for taking a photo and uploading it
211
+ */
212
+ takeAndUploadImage: () => Promise<void>;
205
213
  text: string;
206
214
  toggleAttachmentPicker: () => void;
207
215
  /**
@@ -424,6 +432,11 @@ export type InputMessageInputContextValue<
424
432
  */
425
433
  emojiSearchIndex?: EmojiSearchIndex;
426
434
 
435
+ /**
436
+ * Handler for when the attach button is pressed.
437
+ */
438
+ handleAttachButtonPress?: () => void;
439
+
427
440
  /** Initial value to set on input */
428
441
  initialValue?: string;
429
442
  /**
@@ -536,7 +549,7 @@ export const MessageInputProvider = <
536
549
  }>({});
537
550
  const [giphyActive, setGiphyActive] = useState(false);
538
551
  const [sendThreadMessageInChannel, setSendThreadMessageInChannel] = useState(false);
539
- const { editing, hasFilePicker, hasImagePicker, initialValue } = value;
552
+ const { editing, initialValue } = value;
540
553
  const {
541
554
  fileUploads,
542
555
  imageUploads,
@@ -626,21 +639,77 @@ export const MessageInputProvider = <
626
639
  }
627
640
  };
628
641
 
629
- const openAttachmentPicker = () => {
630
- if (hasImagePicker) {
631
- Keyboard.dismiss();
632
- setSelectedPicker('images');
633
- openPicker();
634
- } else if (hasFilePicker) {
635
- pickFile();
642
+ /**
643
+ * Function for capturing a photo and uploading it
644
+ */
645
+ const takeAndUploadImage = async () => {
646
+ setSelectedPicker(undefined);
647
+ closePicker();
648
+ const photo = await takePhoto({ compressImageQuality: value.compressImageQuality });
649
+ if (photo.askToOpenSettings) {
650
+ Alert.alert(
651
+ t('Allow camera access in device settings'),
652
+ t('Device camera is used to take photos or videos.'),
653
+ [
654
+ { style: 'cancel', text: t('Cancel') },
655
+ { onPress: () => Linking.openSettings(), style: 'default', text: t('Open Settings') },
656
+ ],
657
+ );
658
+ }
659
+ if (!photo.cancelled) {
660
+ setSelectedImages((images) => [...images, photo]);
636
661
  }
637
662
  };
638
663
 
664
+ /**
665
+ * Function for picking a photo from native image picker and uploading it
666
+ */
667
+ const pickAndUploadImageFromNativePicker = async () => {
668
+ const result = await pickImage();
669
+ if (result.askToOpenSettings) {
670
+ Alert.alert(
671
+ t('Allow access to your Gallery'),
672
+ t('Device gallery permissions is used to take photos or videos.'),
673
+ [
674
+ { style: 'cancel', text: t('Cancel') },
675
+ { onPress: () => Linking.openSettings(), style: 'default', text: t('Open Settings') },
676
+ ],
677
+ );
678
+ }
679
+ if (result.assets && result.assets.length > 0) {
680
+ result.assets.forEach((asset) => {
681
+ if (asset.type.includes('image')) {
682
+ setSelectedImages((prevImages) => [...prevImages, asset]);
683
+ } else {
684
+ setSelectedFiles((prevFiles) => [
685
+ ...prevFiles,
686
+ { ...asset, mimeType: asset.type, type: FileTypes.Video },
687
+ ]);
688
+ }
689
+ });
690
+ }
691
+ };
692
+
693
+ /**
694
+ * Function to open the attachment picker if the MediaLibary is installed.
695
+ */
696
+ const openAttachmentPicker = () => {
697
+ Keyboard.dismiss();
698
+ setSelectedPicker('images');
699
+ openPicker();
700
+ };
701
+
702
+ /**
703
+ * Function to close the attachment picker if the MediaLibrary is installed.
704
+ */
639
705
  const closeAttachmentPicker = () => {
640
706
  setSelectedPicker(undefined);
641
707
  closePicker();
642
708
  };
643
709
 
710
+ /**
711
+ * Function to toggle the attachment picker if the MediaLibrary is installed.
712
+ */
644
713
  const toggleAttachmentPicker = () => {
645
714
  if (selectedPicker) {
646
715
  closeAttachmentPicker();
@@ -723,20 +792,20 @@ export const MessageInputProvider = <
723
792
  original_height: image.height,
724
793
  original_width: image.width,
725
794
  originalImage: image.file,
726
- type: 'image',
795
+ type: FileTypes.Image,
727
796
  };
728
797
  };
729
798
 
730
799
  const mapFileUploadToAttachment = (file: FileUpload): Attachment<StreamChatGenerics> => {
731
- if (file.type === 'image') {
800
+ if (file.type === FileTypes.Image) {
732
801
  return {
733
802
  fallback: file.file.name,
734
803
  image_url: file.url,
735
804
  mime_type: file.file.mimeType,
736
805
  originalFile: file.file,
737
- type: 'image',
806
+ type: FileTypes.Image,
738
807
  };
739
- } else if (file.type === 'audio') {
808
+ } else if (file.type === FileTypes.Audio) {
740
809
  return {
741
810
  asset_url: file.url || file.file.uri,
742
811
  duration: file.file.duration,
@@ -744,9 +813,9 @@ export const MessageInputProvider = <
744
813
  mime_type: file.file.mimeType,
745
814
  originalFile: file.file,
746
815
  title: file.file.name,
747
- type: 'audio',
816
+ type: FileTypes.Audio,
748
817
  };
749
- } else if (file.type === 'video') {
818
+ } else if (file.type === FileTypes.Video) {
750
819
  return {
751
820
  asset_url: file.url || file.file.uri,
752
821
  duration: file.file.duration,
@@ -755,9 +824,9 @@ export const MessageInputProvider = <
755
824
  originalFile: file.file,
756
825
  thumb_url: file.thumb_url,
757
826
  title: file.file.name,
758
- type: 'video',
827
+ type: FileTypes.Video,
759
828
  };
760
- } else if (file.type === 'voiceRecording') {
829
+ } else if (file.type === FileTypes.VoiceRecording) {
761
830
  return {
762
831
  asset_url: file.url || file.file.uri,
763
832
  duration: file.file.duration,
@@ -765,7 +834,7 @@ export const MessageInputProvider = <
765
834
  mime_type: file.file.mimeType,
766
835
  originalFile: file.file,
767
836
  title: file.file.name,
768
- type: 'voiceRecording',
837
+ type: FileTypes.VoiceRecording,
769
838
  waveform_data: file.file.waveform_data,
770
839
  };
771
840
  } else {
@@ -775,7 +844,7 @@ export const MessageInputProvider = <
775
844
  mime_type: file.file.mimeType,
776
845
  originalFile: file.file,
777
846
  title: file.file.name,
778
- type: 'file',
847
+ type: FileTypes.File,
779
848
  };
780
849
  }
781
850
  };
@@ -940,7 +1009,7 @@ export const MessageInputProvider = <
940
1009
  const attachments = [
941
1010
  {
942
1011
  image_url: image.url,
943
- type: 'image',
1012
+ type: FileTypes.Image,
944
1013
  },
945
1014
  ] as StreamMessage<StreamChatGenerics>['attachments'];
946
1015
 
@@ -1287,6 +1356,7 @@ export const MessageInputProvider = <
1287
1356
  openCommandsPicker,
1288
1357
  openFilePicker: pickFile,
1289
1358
  openMentionsPicker,
1359
+ pickAndUploadImageFromNativePicker,
1290
1360
  pickFile,
1291
1361
  removeFile,
1292
1362
  removeImage,
@@ -1307,6 +1377,7 @@ export const MessageInputProvider = <
1307
1377
  setShowMoreOptions,
1308
1378
  setText,
1309
1379
  showMoreOptions,
1380
+ takeAndUploadImage,
1310
1381
  text,
1311
1382
  thread,
1312
1383
  toggleAttachmentPicker,
@@ -7,15 +7,11 @@ import type { AppSettingsAPIResponse, StreamChat } from 'stream-chat';
7
7
 
8
8
  import { ChatContextValue, ChatProvider } from '../../../contexts/chatContext/ChatContext';
9
9
 
10
- import {
11
- generateFileAttachment,
12
- generateImageAttachment,
13
- } from '../../../mock-builders/generator/attachment';
10
+ import { generateImageAttachment } from '../../../mock-builders/generator/attachment';
14
11
 
15
12
  import { generateMessage } from '../../../mock-builders/generator/message';
16
13
  import { generateUser } from '../../../mock-builders/generator/user';
17
14
 
18
- import * as NativeUtils from '../../../native';
19
15
  import type { DefaultStreamChatGenerics } from '../../../types/types';
20
16
  import { FileState } from '../../../utils/utils';
21
17
  import {
@@ -235,37 +231,4 @@ describe('MessageInputContext', () => {
235
231
  expect(result.current.text).toBe(`${initialProps.editing.text}@`);
236
232
  });
237
233
  });
238
-
239
- it('openAttachmentPicker works', async () => {
240
- jest.spyOn(NativeUtils, 'pickDocument').mockImplementation(
241
- jest.fn().mockResolvedValue({
242
- cancelled: false,
243
- docs: [generateFileAttachment(), generateImageAttachment()],
244
- }),
245
- );
246
- const initialProps = {
247
- editing: message,
248
- hasFilePicker: true,
249
- hasImagePicker: false,
250
- };
251
- const { result } = renderHook(() => useMessageInputContext(), {
252
- initialProps,
253
- wrapper: (props) => (
254
- <Wrapper
255
- editing={initialProps.editing}
256
- hasFilePicker={initialProps.hasFilePicker}
257
- hasImagePicker={initialProps.hasImagePicker}
258
- {...props}
259
- />
260
- ),
261
- });
262
-
263
- act(() => {
264
- result.current.openAttachmentPicker();
265
- });
266
-
267
- await waitFor(async () => {
268
- expect(await result.current.pickFile()).toBe(undefined);
269
- });
270
- });
271
234
  });