stream-chat-react-native-core 5.39.6 → 5.40.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 (433) hide show
  1. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js +27 -0
  2. package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js.map +1 -1
  3. package/lib/commonjs/components/Channel/Channel.js +17 -4
  4. package/lib/commonjs/components/Channel/Channel.js.map +1 -1
  5. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js +7 -1
  6. package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  7. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +5 -1
  8. package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  9. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js +46 -3
  10. package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  11. package/lib/commonjs/components/Chat/Chat.js +2 -0
  12. package/lib/commonjs/components/Chat/Chat.js.map +1 -1
  13. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js +10 -0
  14. package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  15. package/lib/commonjs/components/Message/Message.js +13 -0
  16. package/lib/commonjs/components/Message/Message.js.map +1 -1
  17. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +31 -15
  18. package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
  19. package/lib/commonjs/components/MessageInput/MessageInput.js +44 -1
  20. package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
  21. package/lib/commonjs/components/MessageInput/components/NativeAttachmentPicker.js +18 -1
  22. package/lib/commonjs/components/MessageInput/components/NativeAttachmentPicker.js.map +1 -1
  23. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +10 -0
  24. package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +1 -1
  25. package/lib/commonjs/components/Poll/CreatePollContent.js +386 -0
  26. package/lib/commonjs/components/Poll/CreatePollContent.js.map +1 -0
  27. package/lib/commonjs/components/Poll/Poll.js +112 -0
  28. package/lib/commonjs/components/Poll/Poll.js.map +1 -0
  29. package/lib/commonjs/components/Poll/components/Button.js +513 -0
  30. package/lib/commonjs/components/Poll/components/Button.js.map +1 -0
  31. package/lib/commonjs/components/Poll/components/CreatePollIcon.js +23 -0
  32. package/lib/commonjs/components/Poll/components/CreatePollIcon.js.map +1 -0
  33. package/lib/commonjs/components/Poll/components/CreatePollOptions.js +281 -0
  34. package/lib/commonjs/components/Poll/components/CreatePollOptions.js.map +1 -0
  35. package/lib/commonjs/components/Poll/components/PollAnswersList.js +154 -0
  36. package/lib/commonjs/components/Poll/components/PollAnswersList.js.map +1 -0
  37. package/lib/commonjs/components/Poll/components/PollInputDialog.js +139 -0
  38. package/lib/commonjs/components/Poll/components/PollInputDialog.js.map +1 -0
  39. package/lib/commonjs/components/Poll/components/PollModalHeader.js +60 -0
  40. package/lib/commonjs/components/Poll/components/PollModalHeader.js.map +1 -0
  41. package/lib/commonjs/components/Poll/components/PollOption.js +209 -0
  42. package/lib/commonjs/components/Poll/components/PollOption.js.map +1 -0
  43. package/lib/commonjs/components/Poll/components/PollResults/PollOptionFullResults.js +123 -0
  44. package/lib/commonjs/components/Poll/components/PollResults/PollOptionFullResults.js.map +1 -0
  45. package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js +152 -0
  46. package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js.map +1 -0
  47. package/lib/commonjs/components/Poll/components/PollResults/PollResults.js +101 -0
  48. package/lib/commonjs/components/Poll/components/PollResults/PollResults.js.map +1 -0
  49. package/lib/commonjs/components/Poll/components/PollResults/index.js +37 -0
  50. package/lib/commonjs/components/Poll/components/PollResults/index.js.map +1 -0
  51. package/lib/commonjs/components/Poll/components/index.js +92 -0
  52. package/lib/commonjs/components/Poll/components/index.js.map +1 -0
  53. package/lib/commonjs/components/Poll/hooks/usePollAnswersPagination.js +129 -0
  54. package/lib/commonjs/components/Poll/hooks/usePollAnswersPagination.js.map +1 -0
  55. package/lib/commonjs/components/Poll/hooks/usePollOptionVotesPagination.js +140 -0
  56. package/lib/commonjs/components/Poll/hooks/usePollOptionVotesPagination.js.map +1 -0
  57. package/lib/commonjs/components/Poll/hooks/usePollState.js +103 -0
  58. package/lib/commonjs/components/Poll/hooks/usePollState.js.map +1 -0
  59. package/lib/commonjs/components/Poll/hooks/usePollStateStore.js +13 -0
  60. package/lib/commonjs/components/Poll/hooks/usePollStateStore.js.map +1 -0
  61. package/lib/commonjs/components/Poll/index.js +81 -0
  62. package/lib/commonjs/components/Poll/index.js.map +1 -0
  63. package/lib/commonjs/components/Reply/Reply.js +1 -1
  64. package/lib/commonjs/components/Reply/Reply.js.map +1 -1
  65. package/lib/commonjs/components/index.js +11 -0
  66. package/lib/commonjs/components/index.js.map +1 -1
  67. package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  68. package/lib/commonjs/contexts/index.js +11 -0
  69. package/lib/commonjs/contexts/index.js.map +1 -1
  70. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +26 -3
  71. package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  72. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +9 -1
  73. package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  74. package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  75. package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
  76. package/lib/commonjs/contexts/overlayContext/OverlayContext.js.map +1 -1
  77. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +4 -0
  78. package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
  79. package/lib/commonjs/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js +3 -0
  80. package/lib/commonjs/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js.map +1 -1
  81. package/lib/commonjs/contexts/pollContext/createPollContentContext.js +33 -0
  82. package/lib/commonjs/contexts/pollContext/createPollContentContext.js.map +1 -0
  83. package/lib/commonjs/contexts/pollContext/index.js +26 -0
  84. package/lib/commonjs/contexts/pollContext/index.js.map +1 -0
  85. package/lib/commonjs/contexts/pollContext/pollContext.js +33 -0
  86. package/lib/commonjs/contexts/pollContext/pollContext.js.map +1 -0
  87. package/lib/commonjs/contexts/themeContext/utils/theme.js +126 -0
  88. package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
  89. package/lib/commonjs/i18n/en.json +34 -0
  90. package/lib/commonjs/i18n/es.json +38 -0
  91. package/lib/commonjs/i18n/fr.json +38 -0
  92. package/lib/commonjs/i18n/he.json +38 -0
  93. package/lib/commonjs/i18n/hi.json +34 -0
  94. package/lib/commonjs/i18n/it.json +38 -0
  95. package/lib/commonjs/i18n/ja.json +34 -0
  96. package/lib/commonjs/i18n/ko.json +34 -0
  97. package/lib/commonjs/i18n/nl.json +34 -0
  98. package/lib/commonjs/i18n/pt-br.json +38 -0
  99. package/lib/commonjs/i18n/ru.json +42 -0
  100. package/lib/commonjs/i18n/tr.json +34 -0
  101. package/lib/commonjs/icons/Back.js +19 -0
  102. package/lib/commonjs/icons/Back.js.map +1 -0
  103. package/lib/commonjs/icons/DragHandle.js +21 -0
  104. package/lib/commonjs/icons/DragHandle.js.map +1 -0
  105. package/lib/commonjs/icons/PollThumbnail.js +19 -0
  106. package/lib/commonjs/icons/PollThumbnail.js.map +1 -0
  107. package/lib/commonjs/icons/SendPoll.js +19 -0
  108. package/lib/commonjs/icons/SendPoll.js.map +1 -0
  109. package/lib/commonjs/icons/index.js +44 -0
  110. package/lib/commonjs/icons/index.js.map +1 -1
  111. package/lib/commonjs/store/QuickSqliteClient.js +1 -1
  112. package/lib/commonjs/store/apis/index.js +11 -0
  113. package/lib/commonjs/store/apis/index.js.map +1 -1
  114. package/lib/commonjs/store/apis/updatePollMessage.js +50 -0
  115. package/lib/commonjs/store/apis/updatePollMessage.js.map +1 -0
  116. package/lib/commonjs/store/mappers/mapMessageToStorable.js +5 -1
  117. package/lib/commonjs/store/mappers/mapMessageToStorable.js.map +1 -1
  118. package/lib/commonjs/store/mappers/mapStorableToMessage.js +5 -1
  119. package/lib/commonjs/store/mappers/mapStorableToMessage.js.map +1 -1
  120. package/lib/commonjs/store/schema.js +2 -0
  121. package/lib/commonjs/store/schema.js.map +1 -1
  122. package/lib/commonjs/version.json +1 -1
  123. package/lib/module/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js +27 -0
  124. package/lib/module/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js.map +1 -1
  125. package/lib/module/components/Channel/Channel.js +17 -4
  126. package/lib/module/components/Channel/Channel.js.map +1 -1
  127. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js +7 -1
  128. package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
  129. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +5 -1
  130. package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
  131. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +46 -3
  132. package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
  133. package/lib/module/components/Chat/Chat.js +2 -0
  134. package/lib/module/components/Chat/Chat.js.map +1 -1
  135. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js +10 -0
  136. package/lib/module/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
  137. package/lib/module/components/Message/Message.js +13 -0
  138. package/lib/module/components/Message/Message.js.map +1 -1
  139. package/lib/module/components/Message/MessageSimple/MessageContent.js +31 -15
  140. package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
  141. package/lib/module/components/MessageInput/MessageInput.js +44 -1
  142. package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
  143. package/lib/module/components/MessageInput/components/NativeAttachmentPicker.js +18 -1
  144. package/lib/module/components/MessageInput/components/NativeAttachmentPicker.js.map +1 -1
  145. package/lib/module/components/MessageOverlay/MessageOverlay.js +10 -0
  146. package/lib/module/components/MessageOverlay/MessageOverlay.js.map +1 -1
  147. package/lib/module/components/Poll/CreatePollContent.js +386 -0
  148. package/lib/module/components/Poll/CreatePollContent.js.map +1 -0
  149. package/lib/module/components/Poll/Poll.js +112 -0
  150. package/lib/module/components/Poll/Poll.js.map +1 -0
  151. package/lib/module/components/Poll/components/Button.js +513 -0
  152. package/lib/module/components/Poll/components/Button.js.map +1 -0
  153. package/lib/module/components/Poll/components/CreatePollIcon.js +23 -0
  154. package/lib/module/components/Poll/components/CreatePollIcon.js.map +1 -0
  155. package/lib/module/components/Poll/components/CreatePollOptions.js +281 -0
  156. package/lib/module/components/Poll/components/CreatePollOptions.js.map +1 -0
  157. package/lib/module/components/Poll/components/PollAnswersList.js +154 -0
  158. package/lib/module/components/Poll/components/PollAnswersList.js.map +1 -0
  159. package/lib/module/components/Poll/components/PollInputDialog.js +139 -0
  160. package/lib/module/components/Poll/components/PollInputDialog.js.map +1 -0
  161. package/lib/module/components/Poll/components/PollModalHeader.js +60 -0
  162. package/lib/module/components/Poll/components/PollModalHeader.js.map +1 -0
  163. package/lib/module/components/Poll/components/PollOption.js +209 -0
  164. package/lib/module/components/Poll/components/PollOption.js.map +1 -0
  165. package/lib/module/components/Poll/components/PollResults/PollOptionFullResults.js +123 -0
  166. package/lib/module/components/Poll/components/PollResults/PollOptionFullResults.js.map +1 -0
  167. package/lib/module/components/Poll/components/PollResults/PollResultItem.js +152 -0
  168. package/lib/module/components/Poll/components/PollResults/PollResultItem.js.map +1 -0
  169. package/lib/module/components/Poll/components/PollResults/PollResults.js +101 -0
  170. package/lib/module/components/Poll/components/PollResults/PollResults.js.map +1 -0
  171. package/lib/module/components/Poll/components/PollResults/index.js +37 -0
  172. package/lib/module/components/Poll/components/PollResults/index.js.map +1 -0
  173. package/lib/module/components/Poll/components/index.js +92 -0
  174. package/lib/module/components/Poll/components/index.js.map +1 -0
  175. package/lib/module/components/Poll/hooks/usePollAnswersPagination.js +129 -0
  176. package/lib/module/components/Poll/hooks/usePollAnswersPagination.js.map +1 -0
  177. package/lib/module/components/Poll/hooks/usePollOptionVotesPagination.js +140 -0
  178. package/lib/module/components/Poll/hooks/usePollOptionVotesPagination.js.map +1 -0
  179. package/lib/module/components/Poll/hooks/usePollState.js +103 -0
  180. package/lib/module/components/Poll/hooks/usePollState.js.map +1 -0
  181. package/lib/module/components/Poll/hooks/usePollStateStore.js +13 -0
  182. package/lib/module/components/Poll/hooks/usePollStateStore.js.map +1 -0
  183. package/lib/module/components/Poll/index.js +81 -0
  184. package/lib/module/components/Poll/index.js.map +1 -0
  185. package/lib/module/components/Reply/Reply.js +1 -1
  186. package/lib/module/components/Reply/Reply.js.map +1 -1
  187. package/lib/module/components/index.js +11 -0
  188. package/lib/module/components/index.js.map +1 -1
  189. package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
  190. package/lib/module/contexts/index.js +11 -0
  191. package/lib/module/contexts/index.js.map +1 -1
  192. package/lib/module/contexts/messageInputContext/MessageInputContext.js +26 -3
  193. package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
  194. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +9 -1
  195. package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
  196. package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
  197. package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
  198. package/lib/module/contexts/overlayContext/OverlayContext.js.map +1 -1
  199. package/lib/module/contexts/overlayContext/OverlayProvider.js +4 -0
  200. package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
  201. package/lib/module/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js +3 -0
  202. package/lib/module/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js.map +1 -1
  203. package/lib/module/contexts/pollContext/createPollContentContext.js +33 -0
  204. package/lib/module/contexts/pollContext/createPollContentContext.js.map +1 -0
  205. package/lib/module/contexts/pollContext/index.js +26 -0
  206. package/lib/module/contexts/pollContext/index.js.map +1 -0
  207. package/lib/module/contexts/pollContext/pollContext.js +33 -0
  208. package/lib/module/contexts/pollContext/pollContext.js.map +1 -0
  209. package/lib/module/contexts/themeContext/utils/theme.js +126 -0
  210. package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
  211. package/lib/module/i18n/en.json +34 -0
  212. package/lib/module/i18n/es.json +38 -0
  213. package/lib/module/i18n/fr.json +38 -0
  214. package/lib/module/i18n/he.json +38 -0
  215. package/lib/module/i18n/hi.json +34 -0
  216. package/lib/module/i18n/it.json +38 -0
  217. package/lib/module/i18n/ja.json +34 -0
  218. package/lib/module/i18n/ko.json +34 -0
  219. package/lib/module/i18n/nl.json +34 -0
  220. package/lib/module/i18n/pt-br.json +38 -0
  221. package/lib/module/i18n/ru.json +42 -0
  222. package/lib/module/i18n/tr.json +34 -0
  223. package/lib/module/icons/Back.js +19 -0
  224. package/lib/module/icons/Back.js.map +1 -0
  225. package/lib/module/icons/DragHandle.js +21 -0
  226. package/lib/module/icons/DragHandle.js.map +1 -0
  227. package/lib/module/icons/PollThumbnail.js +19 -0
  228. package/lib/module/icons/PollThumbnail.js.map +1 -0
  229. package/lib/module/icons/SendPoll.js +19 -0
  230. package/lib/module/icons/SendPoll.js.map +1 -0
  231. package/lib/module/icons/index.js +44 -0
  232. package/lib/module/icons/index.js.map +1 -1
  233. package/lib/module/store/QuickSqliteClient.js +1 -1
  234. package/lib/module/store/apis/index.js +11 -0
  235. package/lib/module/store/apis/index.js.map +1 -1
  236. package/lib/module/store/apis/updatePollMessage.js +50 -0
  237. package/lib/module/store/apis/updatePollMessage.js.map +1 -0
  238. package/lib/module/store/mappers/mapMessageToStorable.js +5 -1
  239. package/lib/module/store/mappers/mapMessageToStorable.js.map +1 -1
  240. package/lib/module/store/mappers/mapStorableToMessage.js +5 -1
  241. package/lib/module/store/mappers/mapStorableToMessage.js.map +1 -1
  242. package/lib/module/store/schema.js +2 -0
  243. package/lib/module/store/schema.js.map +1 -1
  244. package/lib/module/version.json +1 -1
  245. package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerSelectionBar.d.ts.map +1 -1
  246. package/lib/typescript/components/Channel/Channel.d.ts +2 -2
  247. package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
  248. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts +1 -1
  249. package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts.map +1 -1
  250. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
  251. package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts.map +1 -1
  252. package/lib/typescript/components/ChannelPreview/hooks/useLatestMessagePreview.d.ts +5 -1
  253. package/lib/typescript/components/ChannelPreview/hooks/useLatestMessagePreview.d.ts.map +1 -1
  254. package/lib/typescript/components/Chat/Chat.d.ts.map +1 -1
  255. package/lib/typescript/components/Chat/hooks/handleEventToSyncDB.d.ts.map +1 -1
  256. package/lib/typescript/components/Message/Message.d.ts +1 -1
  257. package/lib/typescript/components/Message/Message.d.ts.map +1 -1
  258. package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts.map +1 -1
  259. package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
  260. package/lib/typescript/components/MessageInput/MessageInput.d.ts.map +1 -1
  261. package/lib/typescript/components/MessageInput/components/NativeAttachmentPicker.d.ts.map +1 -1
  262. package/lib/typescript/components/MessageOverlay/MessageOverlay.d.ts.map +1 -1
  263. package/lib/typescript/components/Poll/CreatePollContent.d.ts +6 -0
  264. package/lib/typescript/components/Poll/CreatePollContent.d.ts.map +1 -0
  265. package/lib/typescript/components/Poll/Poll.d.ts +13 -0
  266. package/lib/typescript/components/Poll/Poll.d.ts.map +1 -0
  267. package/lib/typescript/components/Poll/components/Button.d.ts +35 -0
  268. package/lib/typescript/components/Poll/components/Button.d.ts.map +1 -0
  269. package/lib/typescript/components/Poll/components/CreatePollIcon.d.ts +3 -0
  270. package/lib/typescript/components/Poll/components/CreatePollIcon.d.ts.map +1 -0
  271. package/lib/typescript/components/Poll/components/CreatePollOptions.d.ts +34 -0
  272. package/lib/typescript/components/Poll/components/CreatePollOptions.d.ts.map +1 -0
  273. package/lib/typescript/components/Poll/components/PollAnswersList.d.ts +15 -0
  274. package/lib/typescript/components/Poll/components/PollAnswersList.d.ts.map +1 -0
  275. package/lib/typescript/components/Poll/components/PollInputDialog.d.ts +10 -0
  276. package/lib/typescript/components/Poll/components/PollInputDialog.d.ts.map +1 -0
  277. package/lib/typescript/components/Poll/components/PollModalHeader.d.ts +7 -0
  278. package/lib/typescript/components/Poll/components/PollModalHeader.d.ts.map +1 -0
  279. package/lib/typescript/components/Poll/components/PollOption.d.ts +16 -0
  280. package/lib/typescript/components/Poll/components/PollOption.d.ts.map +1 -0
  281. package/lib/typescript/components/Poll/components/PollResults/PollOptionFullResults.d.ts +18 -0
  282. package/lib/typescript/components/Poll/components/PollResults/PollOptionFullResults.d.ts.map +1 -0
  283. package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts +9 -0
  284. package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts.map +1 -0
  285. package/lib/typescript/components/Poll/components/PollResults/PollResults.d.ts +10 -0
  286. package/lib/typescript/components/Poll/components/PollResults/PollResults.d.ts.map +1 -0
  287. package/lib/typescript/components/Poll/components/PollResults/index.d.ts +4 -0
  288. package/lib/typescript/components/Poll/components/PollResults/index.d.ts.map +1 -0
  289. package/lib/typescript/components/Poll/components/index.d.ts +9 -0
  290. package/lib/typescript/components/Poll/components/index.d.ts.map +1 -0
  291. package/lib/typescript/components/Poll/hooks/usePollAnswersPagination.d.ts +29 -0
  292. package/lib/typescript/components/Poll/hooks/usePollAnswersPagination.d.ts.map +1 -0
  293. package/lib/typescript/components/Poll/hooks/usePollOptionVotesPagination.d.ts +32 -0
  294. package/lib/typescript/components/Poll/hooks/usePollOptionVotesPagination.d.ts.map +1 -0
  295. package/lib/typescript/components/Poll/hooks/usePollState.d.ts +26 -0
  296. package/lib/typescript/components/Poll/hooks/usePollState.d.ts.map +1 -0
  297. package/lib/typescript/components/Poll/hooks/usePollStateStore.d.ts +3 -0
  298. package/lib/typescript/components/Poll/hooks/usePollStateStore.d.ts.map +1 -0
  299. package/lib/typescript/components/Poll/index.d.ts +8 -0
  300. package/lib/typescript/components/Poll/index.d.ts.map +1 -0
  301. package/lib/typescript/components/Reply/Reply.d.ts.map +1 -1
  302. package/lib/typescript/components/index.d.ts +1 -0
  303. package/lib/typescript/components/index.d.ts.map +1 -1
  304. package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts +7 -1
  305. package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts.map +1 -1
  306. package/lib/typescript/contexts/index.d.ts +1 -0
  307. package/lib/typescript/contexts/index.d.ts.map +1 -1
  308. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +11 -2
  309. package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts.map +1 -1
  310. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts +1 -1
  311. package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts.map +1 -1
  312. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +2 -1
  313. package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts.map +1 -1
  314. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +9 -1
  315. package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts.map +1 -1
  316. package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts +1 -1
  317. package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts.map +1 -1
  318. package/lib/typescript/contexts/overlayContext/OverlayProvider.d.ts.map +1 -1
  319. package/lib/typescript/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.d.ts +3 -0
  320. package/lib/typescript/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.d.ts.map +1 -1
  321. package/lib/typescript/contexts/pollContext/createPollContentContext.d.ts +20 -0
  322. package/lib/typescript/contexts/pollContext/createPollContentContext.d.ts.map +1 -0
  323. package/lib/typescript/contexts/pollContext/index.d.ts +3 -0
  324. package/lib/typescript/contexts/pollContext/index.d.ts.map +1 -0
  325. package/lib/typescript/contexts/pollContext/pollContext.d.ts +14 -0
  326. package/lib/typescript/contexts/pollContext/pollContext.d.ts.map +1 -0
  327. package/lib/typescript/contexts/themeContext/utils/theme.d.ts +126 -0
  328. package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
  329. package/lib/typescript/i18n/en.json +34 -0
  330. package/lib/typescript/i18n/es.json +38 -0
  331. package/lib/typescript/i18n/fr.json +38 -0
  332. package/lib/typescript/i18n/he.json +38 -0
  333. package/lib/typescript/i18n/hi.json +34 -0
  334. package/lib/typescript/i18n/it.json +38 -0
  335. package/lib/typescript/i18n/ja.json +34 -0
  336. package/lib/typescript/i18n/ko.json +34 -0
  337. package/lib/typescript/i18n/nl.json +34 -0
  338. package/lib/typescript/i18n/pt-br.json +38 -0
  339. package/lib/typescript/i18n/ru.json +42 -0
  340. package/lib/typescript/i18n/tr.json +34 -0
  341. package/lib/typescript/icons/Back.d.ts +4 -0
  342. package/lib/typescript/icons/Back.d.ts.map +1 -0
  343. package/lib/typescript/icons/DragHandle.d.ts +4 -0
  344. package/lib/typescript/icons/DragHandle.d.ts.map +1 -0
  345. package/lib/typescript/icons/PollThumbnail.d.ts +4 -0
  346. package/lib/typescript/icons/PollThumbnail.d.ts.map +1 -0
  347. package/lib/typescript/icons/SendPoll.d.ts +4 -0
  348. package/lib/typescript/icons/SendPoll.d.ts.map +1 -0
  349. package/lib/typescript/icons/index.d.ts +4 -0
  350. package/lib/typescript/icons/index.d.ts.map +1 -1
  351. package/lib/typescript/store/apis/index.d.ts +1 -0
  352. package/lib/typescript/store/apis/index.d.ts.map +1 -1
  353. package/lib/typescript/store/apis/updatePollMessage.d.ts +7 -0
  354. package/lib/typescript/store/apis/updatePollMessage.d.ts.map +1 -0
  355. package/lib/typescript/store/mappers/mapMessageToStorable.d.ts.map +1 -1
  356. package/lib/typescript/store/mappers/mapStorableToMessage.d.ts.map +1 -1
  357. package/lib/typescript/store/schema.d.ts +2 -0
  358. package/lib/typescript/store/schema.d.ts.map +1 -1
  359. package/lib/typescript/utils/i18n/Streami18n.d.ts +34 -0
  360. package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
  361. package/package.json +2 -2
  362. package/src/components/AttachmentPicker/components/AttachmentPickerSelectionBar.tsx +35 -2
  363. package/src/components/Channel/Channel.tsx +27 -4
  364. package/src/components/Channel/hooks/useCreateInputMessageInputContext.ts +16 -1
  365. package/src/components/Channel/hooks/useCreateMessagesContext.ts +5 -0
  366. package/src/components/ChannelPreview/hooks/useLatestMessagePreview.ts +63 -4
  367. package/src/components/Chat/Chat.tsx +2 -0
  368. package/src/components/Chat/hooks/handleEventToSyncDB.ts +19 -0
  369. package/src/components/Message/Message.tsx +15 -1
  370. package/src/components/Message/MessageSimple/MessageContent.tsx +16 -0
  371. package/src/components/MessageInput/MessageInput.tsx +58 -1
  372. package/src/components/MessageInput/__tests__/MessageInput.test.js +2 -0
  373. package/src/components/MessageInput/components/NativeAttachmentPicker.tsx +29 -2
  374. package/src/components/MessageOverlay/MessageOverlay.tsx +10 -0
  375. package/src/components/Poll/CreatePollContent.tsx +299 -0
  376. package/src/components/Poll/Poll.tsx +126 -0
  377. package/src/components/Poll/components/Button.tsx +465 -0
  378. package/src/components/Poll/components/CreatePollIcon.tsx +14 -0
  379. package/src/components/Poll/components/CreatePollOptions.tsx +351 -0
  380. package/src/components/Poll/components/PollAnswersList.tsx +134 -0
  381. package/src/components/Poll/components/PollInputDialog.tsx +117 -0
  382. package/src/components/Poll/components/PollModalHeader.tsx +42 -0
  383. package/src/components/Poll/components/PollOption.tsx +172 -0
  384. package/src/components/Poll/components/PollResults/PollOptionFullResults.tsx +108 -0
  385. package/src/components/Poll/components/PollResults/PollResultItem.tsx +115 -0
  386. package/src/components/Poll/components/PollResults/PollResults.tsx +79 -0
  387. package/src/components/Poll/components/PollResults/index.ts +3 -0
  388. package/src/components/Poll/components/index.ts +8 -0
  389. package/src/components/Poll/hooks/usePollAnswersPagination.ts +109 -0
  390. package/src/components/Poll/hooks/usePollOptionVotesPagination.ts +119 -0
  391. package/src/components/Poll/hooks/usePollState.ts +122 -0
  392. package/src/components/Poll/hooks/usePollStateStore.ts +13 -0
  393. package/src/components/Poll/index.ts +10 -0
  394. package/src/components/Reply/Reply.tsx +2 -0
  395. package/src/components/index.ts +1 -0
  396. package/src/contexts/attachmentPickerContext/AttachmentPickerContext.tsx +12 -1
  397. package/src/contexts/index.ts +1 -0
  398. package/src/contexts/messageInputContext/MessageInputContext.tsx +38 -10
  399. package/src/contexts/messageInputContext/__tests__/pickFile.test.tsx +4 -2
  400. package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +9 -0
  401. package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +2 -1
  402. package/src/contexts/messagesContext/MessagesContext.tsx +15 -2
  403. package/src/contexts/overlayContext/OverlayContext.tsx +1 -0
  404. package/src/contexts/overlayContext/OverlayProvider.tsx +3 -0
  405. package/src/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.tsx +3 -0
  406. package/src/contexts/pollContext/createPollContentContext.tsx +49 -0
  407. package/src/contexts/pollContext/index.ts +2 -0
  408. package/src/contexts/pollContext/pollContext.tsx +43 -0
  409. package/src/contexts/themeContext/utils/theme.ts +233 -0
  410. package/src/i18n/en.json +34 -0
  411. package/src/i18n/es.json +38 -0
  412. package/src/i18n/fr.json +38 -0
  413. package/src/i18n/he.json +38 -0
  414. package/src/i18n/hi.json +34 -0
  415. package/src/i18n/it.json +38 -0
  416. package/src/i18n/ja.json +34 -0
  417. package/src/i18n/ko.json +34 -0
  418. package/src/i18n/nl.json +34 -0
  419. package/src/i18n/pt-br.json +38 -0
  420. package/src/i18n/ru.json +42 -0
  421. package/src/i18n/tr.json +34 -0
  422. package/src/icons/Back.tsx +12 -0
  423. package/src/icons/DragHandle.tsx +9 -0
  424. package/src/icons/PollThumbnail.tsx +12 -0
  425. package/src/icons/SendPoll.tsx +12 -0
  426. package/src/icons/index.ts +4 -0
  427. package/src/store/QuickSqliteClient.ts +1 -1
  428. package/src/store/apis/index.ts +1 -0
  429. package/src/store/apis/updatePollMessage.ts +48 -0
  430. package/src/store/mappers/mapMessageToStorable.ts +4 -0
  431. package/src/store/mappers/mapStorableToMessage.ts +4 -0
  432. package/src/store/schema.ts +4 -0
  433. package/src/version.json +1 -1
@@ -0,0 +1,119 @@
1
+ import { useCallback, useEffect, useMemo, useRef, useState } from 'react';
2
+
3
+ import uniqBy from 'lodash/uniqBy';
4
+ import { isVoteAnswer, PollOption, PollOptionVotesQueryParams, PollVote } from 'stream-chat';
5
+
6
+ import { useChatContext, usePollContext } from '../../../contexts';
7
+
8
+ export type UsePollOptionVotesPaginationParams = {
9
+ option: PollOption;
10
+ loadFirstPage?: boolean;
11
+ paginationParams?: PollOptionVotesQueryParams;
12
+ };
13
+
14
+ export type UsePollVotesReturnType = {
15
+ error: Error | undefined;
16
+ hasNextPage: boolean;
17
+ loading: boolean;
18
+ loadMore: () => void;
19
+ next: string | null | undefined;
20
+ votes: PollVote[];
21
+ };
22
+
23
+ /**
24
+ * A hook that queries votes for a given Poll and returns them in a paginated fashion.
25
+ * Should be used instead of the latest_votes_by_option property within the reactive state in the
26
+ * event that we need more than the top 10 votes for an option. The returned property votes will
27
+ * automatically be updated and trigger a state change when paginating further. Querying for votes
28
+ * can only be done on an option by option basis.
29
+ *
30
+ * @param option {PollOption} The option for which we want to load the votes.
31
+ * @param loadFirstPage {boolean} Signifies whether the first page should be automatically loaded whenever
32
+ * the hook is first called.
33
+ * @param paginationParams {PollOptionVotesQueryParams} The pagination params we might want to use for our custom
34
+ * needs when invoking the hook.
35
+ *
36
+ * @returns {UsePollVotesReturnType} An object containing all of the needed pagination values as well as the
37
+ * answers.
38
+ **/
39
+
40
+ export const usePollOptionVotesPagination = ({
41
+ loadFirstPage = true,
42
+ option,
43
+ paginationParams,
44
+ }: UsePollOptionVotesPaginationParams): UsePollVotesReturnType => {
45
+ const { poll } = usePollContext();
46
+ const { client } = useChatContext();
47
+
48
+ const [votes, setVotes] = useState<PollVote[]>([]);
49
+ const [loading, setLoading] = useState(false);
50
+ const [error, setError] = useState<Error>();
51
+ const cursorRef = useRef<string | null>();
52
+ const queryInProgress = useRef(false);
53
+ const optionFilter = useMemo(() => ({ option_id: option.id }), [option.id]);
54
+
55
+ const loadMore = useCallback(async () => {
56
+ if (cursorRef.current === null || queryInProgress.current) return;
57
+ const next = cursorRef.current;
58
+
59
+ setLoading(true);
60
+ queryInProgress.current = true;
61
+ try {
62
+ const { next: newNext, votes } = await poll.queryOptionVotes({
63
+ filter: { ...optionFilter, ...paginationParams?.filter },
64
+ options: !next ? paginationParams?.options : { ...paginationParams?.options, next },
65
+ sort: { created_at: -1, ...paginationParams?.sort },
66
+ });
67
+ cursorRef.current = newNext || null;
68
+ setVotes((prev) => uniqBy([...prev, ...votes], 'id'));
69
+ } catch (e) {
70
+ setError(e as Error);
71
+ }
72
+ queryInProgress.current = false;
73
+ setLoading(false);
74
+ }, [optionFilter, paginationParams, poll]);
75
+
76
+ useEffect(() => {
77
+ if (!loadFirstPage || votes.length) return;
78
+ loadMore();
79
+ }, [loadFirstPage, loadMore, votes]);
80
+
81
+ // TODO: Possibly generalize these in a utility hook.
82
+ useEffect(() => {
83
+ const castedListeners = ['poll.vote_casted', 'poll.vote_changed'].map((eventName) =>
84
+ client.on(eventName, (event) => {
85
+ if (event.poll?.id && event.poll.id !== poll.id) return;
86
+ const vote = event.poll_vote;
87
+ if (vote && !isVoteAnswer(vote)) {
88
+ if (vote.option_id === option.id) {
89
+ setVotes([vote, ...votes.filter((v) => v.id !== vote.id)]);
90
+ } else if (eventName === 'poll.vote_changed') {
91
+ setVotes(votes.filter((v) => v.id !== vote.id));
92
+ }
93
+ }
94
+ }),
95
+ );
96
+
97
+ const removedListener = client.on('poll.vote_removed', (event) => {
98
+ if (event.poll?.id && event.poll.id !== poll.id) return;
99
+ const vote = event.poll_vote;
100
+ if (vote && !isVoteAnswer(vote) && vote.option_id === option.id) {
101
+ setVotes(votes.filter((v) => v.id !== vote.id));
102
+ }
103
+ });
104
+
105
+ return () => {
106
+ castedListeners.forEach((listener) => listener.unsubscribe());
107
+ removedListener.unsubscribe();
108
+ };
109
+ }, [client, option, poll, votes]);
110
+
111
+ return {
112
+ error,
113
+ hasNextPage: cursorRef.current !== null,
114
+ loading,
115
+ loadMore,
116
+ next: cursorRef.current,
117
+ votes,
118
+ };
119
+ };
@@ -0,0 +1,122 @@
1
+ import { useCallback } from 'react';
2
+
3
+ import {
4
+ APIResponse,
5
+ CastVoteAPIResponse,
6
+ PollAnswer,
7
+ PollOption,
8
+ PollState,
9
+ PollVote,
10
+ UpdatePollAPIResponse,
11
+ UserResponse,
12
+ VotingVisibility,
13
+ } from 'stream-chat';
14
+
15
+ import { usePollStateStore } from './usePollStateStore';
16
+
17
+ import { usePollContext } from '../../../contexts';
18
+
19
+ import { DefaultStreamChatGenerics } from '../../../types/types';
20
+
21
+ export type UsePollStateSelectorReturnType = {
22
+ allow_answers: boolean | undefined;
23
+ allow_user_suggested_options: boolean | undefined;
24
+ answers_count: number;
25
+ created_by: UserResponse | null;
26
+ enforce_unique_vote: boolean;
27
+ is_closed: boolean | undefined;
28
+ latest_votes_by_option: Record<string, PollVote[]>;
29
+ max_votes_allowed: number;
30
+ maxVotedOptionIds: string[];
31
+ name: string;
32
+ options: PollOption[];
33
+ ownAnswer: PollAnswer | undefined;
34
+ ownVotesByOptionId: Record<string, PollVote>;
35
+ vote_counts_by_option: Record<string, number>;
36
+ voting_visibility: VotingVisibility | undefined;
37
+ };
38
+
39
+ export type UsePollStateReturnType<
40
+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
41
+ > = UsePollStateSelectorReturnType & {
42
+ addComment: (
43
+ answerText: string,
44
+ ) => Promise<APIResponse & CastVoteAPIResponse<StreamChatGenerics>>;
45
+ addOption: (optionText: string) => Promise<void>;
46
+ endVote: () => Promise<APIResponse & UpdatePollAPIResponse<StreamChatGenerics>>;
47
+ };
48
+
49
+ const selector = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics>(
50
+ nextValue: PollState<StreamChatGenerics>,
51
+ ): UsePollStateSelectorReturnType => ({
52
+ allow_answers: nextValue.allow_answers,
53
+ allow_user_suggested_options: nextValue.allow_user_suggested_options,
54
+ answers_count: nextValue.answers_count,
55
+ created_by: nextValue.created_by,
56
+ enforce_unique_vote: nextValue.enforce_unique_vote,
57
+ is_closed: nextValue.is_closed,
58
+ latest_votes_by_option: nextValue.latest_votes_by_option,
59
+ max_votes_allowed: nextValue.max_votes_allowed,
60
+ maxVotedOptionIds: nextValue.maxVotedOptionIds,
61
+ name: nextValue.name,
62
+ options: nextValue.options,
63
+ ownAnswer: nextValue.ownAnswer,
64
+ ownVotesByOptionId: nextValue.ownVotesByOptionId,
65
+ vote_counts_by_option: nextValue.vote_counts_by_option,
66
+ voting_visibility: nextValue.voting_visibility,
67
+ });
68
+
69
+ export const usePollState = (): UsePollStateReturnType => {
70
+ const { message, poll } = usePollContext();
71
+ const {
72
+ allow_answers,
73
+ allow_user_suggested_options,
74
+ answers_count,
75
+ created_by,
76
+ enforce_unique_vote,
77
+ is_closed,
78
+ latest_votes_by_option,
79
+ max_votes_allowed,
80
+ maxVotedOptionIds,
81
+ name,
82
+ options,
83
+ ownAnswer,
84
+ ownVotesByOptionId,
85
+ vote_counts_by_option,
86
+ voting_visibility,
87
+ } = usePollStateStore(selector);
88
+
89
+ const addOption = useCallback(
90
+ async (optionText: string) => {
91
+ const { poll_option } = await poll.createOption({ text: optionText });
92
+ await poll.castVote(poll_option.id, message.id);
93
+ },
94
+ [message, poll],
95
+ );
96
+ const addComment = useCallback(
97
+ (answerText: string) => poll.addAnswer(answerText, message.id),
98
+ [message.id, poll],
99
+ );
100
+ const endVote = useCallback(() => poll.close(), [poll]);
101
+
102
+ return {
103
+ addComment,
104
+ addOption,
105
+ allow_answers,
106
+ allow_user_suggested_options,
107
+ answers_count,
108
+ created_by,
109
+ endVote,
110
+ enforce_unique_vote,
111
+ is_closed,
112
+ latest_votes_by_option,
113
+ max_votes_allowed,
114
+ maxVotedOptionIds,
115
+ name,
116
+ options,
117
+ ownAnswer,
118
+ ownVotesByOptionId,
119
+ vote_counts_by_option,
120
+ voting_visibility,
121
+ };
122
+ };
@@ -0,0 +1,13 @@
1
+ import { PollState } from 'stream-chat';
2
+
3
+ import { usePollContext } from '../../../contexts';
4
+ import { useStateStore } from '../../../hooks';
5
+
6
+ export const usePollStateStore = <
7
+ T extends Readonly<Record<string, unknown> | Readonly<unknown[]>>,
8
+ >(
9
+ selector: (nextValue: PollState) => T,
10
+ ): T => {
11
+ const { poll } = usePollContext();
12
+ return useStateStore(poll.state, selector);
13
+ };
@@ -0,0 +1,10 @@
1
+ // components
2
+ export * from './Poll';
3
+ export * from './CreatePollContent';
4
+ export * from './components';
5
+
6
+ // hooks
7
+ export * from './hooks/usePollState';
8
+ export * from './hooks/usePollStateStore';
9
+ export * from './hooks/usePollAnswersPagination';
10
+ export * from './hooks/usePollOptionVotesPagination';
@@ -262,6 +262,8 @@ const ReplyWithContext = <
262
262
  text:
263
263
  quotedMessage.type === 'deleted'
264
264
  ? `_${t('Message deleted')}_`
265
+ : quotedMessage.poll
266
+ ? `📊 ${quotedMessage.poll.name}`
265
267
  : quotedMessage.text
266
268
  ? quotedMessage.text.length > 170
267
269
  ? `${quotedMessage.text.slice(0, 170)}...`
@@ -161,6 +161,7 @@ export * from './MessageOverlay/OverlayReactionsAvatar';
161
161
  export * from './MessageOverlay/OverlayReactionList';
162
162
 
163
163
  export * from './ProgressControl/ProgressControl';
164
+ export * from './Poll';
164
165
 
165
166
  export * from './Reply/Reply';
166
167
 
@@ -59,6 +59,12 @@ export type AttachmentPickerContextValue = {
59
59
  */
60
60
  CameraSelectorIcon: React.ComponentType<AttachmentPickerIconProps>;
61
61
  closePicker: () => void;
62
+ /**
63
+ * Custom UI component for the poll creation icon.
64
+ *
65
+ * **Default: ** [CreatePollIcon](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/AttachmentPicker/components/CreatePollIcon.tsx)
66
+ */
67
+ CreatePollIcon: React.ComponentType;
62
68
  /**
63
69
  * Custom UI component for [file selector icon](https://github.com/GetStream/stream-chat-react-native/blob/main/screenshots/docs/1.png)
64
70
  *
@@ -98,7 +104,12 @@ export const AttachmentPickerProvider = ({
98
104
  }: PropsWithChildren<{
99
105
  value?: Pick<
100
106
  AttachmentPickerContextValue,
101
- 'CameraSelectorIcon' | 'closePicker' | 'FileSelectorIcon' | 'ImageSelectorIcon' | 'openPicker'
107
+ | 'CameraSelectorIcon'
108
+ | 'closePicker'
109
+ | 'CreatePollIcon'
110
+ | 'FileSelectorIcon'
111
+ | 'ImageSelectorIcon'
112
+ | 'openPicker'
102
113
  > &
103
114
  Partial<Pick<AttachmentPickerContextValue, 'bottomInset' | 'topInset'>>;
104
115
  }>) => {
@@ -24,3 +24,4 @@ export * from './threadsContext/ThreadListItemContext';
24
24
  export * from './translationContext/TranslationContext';
25
25
  export * from './typingContext/TypingContext';
26
26
  export * from './utils/getDisplayName';
27
+ export * from './pollContext';
@@ -29,6 +29,7 @@ import { useMessageDetailsForState } from './hooks/useMessageDetailsForState';
29
29
 
30
30
  import { isUploadAllowed, MAX_FILE_SIZE_TO_UPLOAD, prettifyFileSize } from './utils/utils';
31
31
 
32
+ import { PollContentProps } from '../../components';
32
33
  import { AudioAttachmentProps } from '../../components/Attachment/AudioAttachment';
33
34
  import { parseLinksFromText } from '../../components/Message/MessageSimple/utils/parseLinks';
34
35
  import type { AttachButtonProps } from '../../components/MessageInput/AttachButton';
@@ -326,7 +327,6 @@ export type InputMessageInputContextValue<
326
327
  */
327
328
  CooldownTimer: React.ComponentType<CooldownTimerProps>;
328
329
  editMessage: StreamChat<StreamChatGenerics>['updateMessage'];
329
-
330
330
  /**
331
331
  * Custom UI component for FileUploadPreview.
332
332
  * Defaults to and accepts same props as: https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/FileUploadPreview.tsx
@@ -335,6 +335,7 @@ export type InputMessageInputContextValue<
335
335
 
336
336
  /** When false, CameraSelectorIcon will be hidden */
337
337
  hasCameraPicker: boolean;
338
+
338
339
  /** When false, CommandsButton will be hidden */
339
340
  hasCommands: boolean;
340
341
  /** When false, FileSelectorIcon will be hidden */
@@ -351,13 +352,13 @@ export type InputMessageInputContextValue<
351
352
  InputReplyStateHeader: React.ComponentType<InputReplyStateHeaderProps<StreamChatGenerics>>;
352
353
  /** Limit on allowed number of files to attach at a time. */
353
354
  maxNumberOfFiles: number;
354
-
355
355
  /**
356
356
  * Custom UI component for more options button.
357
357
  *
358
358
  * Defaults to and accepts same props as: [MoreOptionsButton](https://getstream.io/chat/docs/sdk/reactnative/ui-components/more-options-button/)
359
359
  */
360
360
  MoreOptionsButton: React.ComponentType<MoreOptionsButtonProps>;
361
+
361
362
  /** Limit on the number of lines in the text input before scrolling */
362
363
  numberOfLines: number;
363
364
  quotedMessage: boolean | MessageType<StreamChatGenerics>;
@@ -377,6 +378,7 @@ export type InputMessageInputContextValue<
377
378
  ShowThreadMessageInChannelButton: React.ComponentType<{
378
379
  threadList?: boolean;
379
380
  }>;
381
+
380
382
  /**
381
383
  * Custom UI component for audio recording mic button.
382
384
  *
@@ -389,7 +391,6 @@ export type InputMessageInputContextValue<
389
391
  * **Default** [UploadProgressIndicator](https://github.com/GetStream/stream-chat-react-native/blob/main/package/src/components/MessageInput/UploadProgressIndicator.tsx)
390
392
  */
391
393
  UploadProgressIndicator: React.ComponentType<UploadProgressIndicatorProps>;
392
-
393
394
  /**
394
395
  * Additional props for underlying TextInput component. These props will be forwarded as it is to TextInput component.
395
396
  *
@@ -404,6 +405,7 @@ export type InputMessageInputContextValue<
404
405
  autoCompleteTriggerSettings?: (
405
406
  settings: ACITriggerSettingsParams<StreamChatGenerics>,
406
407
  ) => TriggerSettings<StreamChatGenerics>;
408
+ closePollCreationDialog?: () => void;
407
409
  /**
408
410
  * Compress image with quality (from 0 to 1, where 1 is best quality).
409
411
  * On iOS, values larger than 0.8 don't produce a noticeable quality increase in most images,
@@ -411,6 +413,13 @@ export type InputMessageInputContextValue<
411
413
  * Image picker defaults to 0.8 for iOS and 1 for Android
412
414
  */
413
415
  compressImageQuality?: number;
416
+
417
+ /**
418
+ * Override the entire content of the CreatePoll component. The component has full access to the
419
+ * useCreatePollContext() hook.
420
+ * */
421
+ CreatePollContent?: React.ComponentType<PollContentProps>;
422
+
414
423
  /**
415
424
  * Override file upload request
416
425
  *
@@ -423,6 +432,7 @@ export type InputMessageInputContextValue<
423
432
  file: File,
424
433
  channel: ChannelContextValue<StreamChatGenerics>['channel'],
425
434
  ) => Promise<SendFileAPIResponse>;
435
+
426
436
  /**
427
437
  * Override image upload request
428
438
  *
@@ -444,17 +454,14 @@ export type InputMessageInputContextValue<
444
454
  * It is defined with message type if the editing state is true, else its undefined.
445
455
  */
446
456
  editing?: MessageType<StreamChatGenerics>;
447
-
448
457
  /**
449
458
  * Prop to override the default emoji search index in auto complete suggestion list.
450
459
  */
451
460
  emojiSearchIndex?: EmojiSearchIndex;
452
-
453
461
  /**
454
462
  * Handler for when the attach button is pressed.
455
463
  */
456
464
  handleAttachButtonPress?: () => void;
457
-
458
465
  /** Initial value to set on input */
459
466
  initialValue?: string;
460
467
  /**
@@ -484,13 +491,14 @@ export type InputMessageInputContextValue<
484
491
  */
485
492
  InputButtons?: React.ComponentType<InputButtonsProps<StreamChatGenerics>>;
486
493
  maxMessageLength?: number;
487
- mentionAllAppUsersEnabled?: boolean;
488
494
  /** Object containing filters/sort/options overrides for an @mention user query */
495
+ mentionAllAppUsersEnabled?: boolean;
489
496
  mentionAllAppUsersQuery?: MentionAllAppUsersQuery<StreamChatGenerics>;
490
497
  /**
491
498
  * Callback that is called when the text input's text changes. Changed text is passed as a single string argument to the callback handler.
492
499
  */
493
500
  onChangeText?: (newText: string) => void;
501
+ openPollCreationDialog?: ({ sendMessage }: Pick<LocalMessageInputContext, 'sendMessage'>) => void;
494
502
  SendMessageDisallowedIndicator?: React.ComponentType;
495
503
  /**
496
504
  * ref for input setter function
@@ -500,6 +508,7 @@ export type InputMessageInputContextValue<
500
508
  * @overrideType Function
501
509
  */
502
510
  setInputRef?: (ref: TextInput | null) => void;
511
+ showPollCreationDialog?: boolean;
503
512
  };
504
513
 
505
514
  export type MessageInputContextValue<
@@ -567,7 +576,16 @@ export const MessageInputProvider = <
567
576
  }>({});
568
577
  const [giphyActive, setGiphyActive] = useState(false);
569
578
  const [sendThreadMessageInChannel, setSendThreadMessageInChannel] = useState(false);
570
- const { editing, initialValue } = value;
579
+ const [showPollCreationDialog, setShowPollCreationDialog] = useState(false);
580
+
581
+ const defaultOpenPollCreationDialog = useCallback(() => setShowPollCreationDialog(true), []);
582
+ const closePollCreationDialog = useCallback(() => setShowPollCreationDialog(false), []);
583
+
584
+ const {
585
+ editing,
586
+ initialValue,
587
+ openPollCreationDialog: openPollCreationDialogFromContext,
588
+ } = value;
571
589
  const {
572
590
  fileUploads,
573
591
  imageUploads,
@@ -978,7 +996,7 @@ export const MessageInputProvider = <
978
996
  }
979
997
 
980
998
  // Disallow sending message if its empty.
981
- if (!prevText && attachments.length === 0) {
999
+ if (!prevText && attachments.length === 0 && !customMessageData?.poll_id) {
982
1000
  sending.current = false;
983
1001
  return;
984
1002
  }
@@ -1399,6 +1417,14 @@ export const MessageInputProvider = <
1399
1417
  }
1400
1418
  };
1401
1419
 
1420
+ const openPollCreationDialog = () => {
1421
+ if (openPollCreationDialogFromContext) {
1422
+ openPollCreationDialogFromContext({ sendMessage });
1423
+ return;
1424
+ }
1425
+ defaultOpenPollCreationDialog();
1426
+ };
1427
+
1402
1428
  const messageInputContext = useCreateMessageInputContext({
1403
1429
  appendText,
1404
1430
  asyncIds,
@@ -1450,9 +1476,11 @@ export const MessageInputProvider = <
1450
1476
  uploadNewFile,
1451
1477
  uploadNewImage,
1452
1478
  ...value,
1479
+ closePollCreationDialog,
1480
+ openPollCreationDialog,
1453
1481
  sendMessage, // overriding the originally passed in sendMessage
1482
+ showPollCreationDialog,
1454
1483
  });
1455
-
1456
1484
  return (
1457
1485
  <MessageInputContext.Provider
1458
1486
  value={messageInputContext as unknown as MessageInputContextValue}
@@ -39,9 +39,8 @@ const Wrapper = <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultS
39
39
  </MessageInputProvider>
40
40
  );
41
41
 
42
- afterEach(jest.clearAllMocks);
43
-
44
42
  describe("MessageInputContext's pickFile", () => {
43
+ afterEach(jest.clearAllMocks);
45
44
  jest.spyOn(Alert, 'alert');
46
45
  jest.spyOn(NativeUtils, 'pickDocument').mockImplementation(
47
46
  jest.fn().mockResolvedValue({
@@ -109,5 +108,8 @@ describe("MessageInputContext's pickFile", () => {
109
108
  });
110
109
 
111
110
  expect(Alert.alert).toHaveBeenCalledTimes(2);
111
+ expect(Alert.alert).toHaveBeenCalledWith(
112
+ 'File is too large: {{ size }}, maximum upload size is {{ limit }}',
113
+ );
112
114
  });
113
115
  });
@@ -27,10 +27,12 @@ export const useCreateMessageInputContext = <
27
27
  clearEditingState,
28
28
  clearQuotedMessageState,
29
29
  closeAttachmentPicker,
30
+ closePollCreationDialog,
30
31
  CommandsButton,
31
32
  compressImageQuality,
32
33
  cooldownEndsAt,
33
34
  CooldownTimer,
35
+ CreatePollContent,
34
36
  doDocUploadRequest,
35
37
  doImageUploadRequest,
36
38
  editing,
@@ -69,6 +71,7 @@ export const useCreateMessageInputContext = <
69
71
  openCommandsPicker,
70
72
  openFilePicker,
71
73
  openMentionsPicker,
74
+ openPollCreationDialog,
72
75
  pickAndUploadImageFromNativePicker,
73
76
  pickFile,
74
77
  quotedMessage,
@@ -97,6 +100,7 @@ export const useCreateMessageInputContext = <
97
100
  setShowMoreOptions,
98
101
  setText,
99
102
  showMoreOptions,
103
+ showPollCreationDialog,
100
104
  ShowThreadMessageInChannelButton,
101
105
  StartAudioRecordingButton,
102
106
  takeAndUploadImage,
@@ -149,10 +153,12 @@ export const useCreateMessageInputContext = <
149
153
  clearEditingState,
150
154
  clearQuotedMessageState,
151
155
  closeAttachmentPicker,
156
+ closePollCreationDialog,
152
157
  CommandsButton,
153
158
  compressImageQuality,
154
159
  cooldownEndsAt,
155
160
  CooldownTimer,
161
+ CreatePollContent,
156
162
  doDocUploadRequest,
157
163
  doImageUploadRequest,
158
164
  editing,
@@ -191,6 +197,7 @@ export const useCreateMessageInputContext = <
191
197
  openCommandsPicker,
192
198
  openFilePicker,
193
199
  openMentionsPicker,
200
+ openPollCreationDialog,
194
201
  pickAndUploadImageFromNativePicker,
195
202
  pickFile,
196
203
  quotedMessage,
@@ -219,6 +226,7 @@ export const useCreateMessageInputContext = <
219
226
  setShowMoreOptions,
220
227
  setText,
221
228
  showMoreOptions,
229
+ showPollCreationDialog,
222
230
  ShowThreadMessageInChannelButton,
223
231
  StartAudioRecordingButton,
224
232
  takeAndUploadImage,
@@ -249,6 +257,7 @@ export const useCreateMessageInputContext = <
249
257
  showMoreOptions,
250
258
  text,
251
259
  threadId,
260
+ showPollCreationDialog,
252
261
  ],
253
262
  );
254
263
 
@@ -2,7 +2,7 @@ import React, { PropsWithChildren, useContext } from 'react';
2
2
 
3
3
  import type { ImageProps } from 'react-native';
4
4
 
5
- import type { Attachment, TranslationLanguages } from 'stream-chat';
5
+ import { Attachment, TranslationLanguages } from 'stream-chat';
6
6
 
7
7
  import { useResettableState } from './hooks/useResettableState';
8
8
 
@@ -46,6 +46,7 @@ export type MessageOverlayData<
46
46
  otherAttachments?: Attachment<StreamChatGenerics>[];
47
47
  OverlayReactionList?: React.ComponentType<OverlayReactionListProps<StreamChatGenerics>>;
48
48
  ownCapabilities?: OwnCapabilitiesContextValue;
49
+ Poll?: React.ComponentType;
49
50
  supportedReactions?: ReactionData[];
50
51
  threadList?: boolean;
51
52
  userLanguage?: TranslationLanguages;
@@ -4,6 +4,7 @@ import type { TouchableOpacityProps } from 'react-native';
4
4
 
5
5
  import type { Attachment, ChannelState, MessageResponse } from 'stream-chat';
6
6
 
7
+ import { PollContentProps } from '../../components';
7
8
  import type { AttachmentProps } from '../../components/Attachment/Attachment';
8
9
  import type { AttachmentActionsProps } from '../../components/Attachment/AttachmentActions';
9
10
  import type { AudioAttachmentProps } from '../../components/Attachment/AudioAttachment';
@@ -60,7 +61,13 @@ import { DEFAULT_BASE_CONTEXT_VALUE } from '../utils/defaultBaseContextValue';
60
61
  import { getDisplayName } from '../utils/getDisplayName';
61
62
  import { isTestEnvironment } from '../utils/isTestEnvironment';
62
63
 
63
- export type MessageContentType = 'attachments' | 'files' | 'gallery' | 'quoted_reply' | 'text';
64
+ export type MessageContentType =
65
+ | 'attachments'
66
+ | 'files'
67
+ | 'gallery'
68
+ | 'quoted_reply'
69
+ | 'poll'
70
+ | 'text';
64
71
  export type DeletedMessagesVisibilityType = 'always' | 'never' | 'receiver' | 'sender';
65
72
 
66
73
  export type MessagesContextValue<
@@ -350,6 +357,8 @@ export type MessagesContextValue<
350
357
  handleRetry?: (message: MessageType<StreamChatGenerics>) => Promise<void>;
351
358
  /** Handler to access when a thread reply action is invoked */
352
359
  handleThreadReply?: (message: MessageType<StreamChatGenerics>) => Promise<void>;
360
+ /** A flag specifying whether the poll creation button is available or not. */
361
+ hasCreatePoll?: boolean;
353
362
  /** Handler to deal with custom memoization logic of Attachment */
354
363
  isAttachmentEqual?: (
355
364
  prevAttachment: Attachment<StreamChatGenerics>,
@@ -502,7 +511,11 @@ export type MessagesContextValue<
502
511
  * ```
503
512
  */
504
513
  onPressMessage?: (payload: MessageTouchableHandlerPayload<StreamChatGenerics>) => void;
505
-
514
+ /**
515
+ * Override the entire content of the Poll component. The component has full access to the
516
+ * usePollState() and usePollContext() hooks.
517
+ * */
518
+ PollContent?: React.ComponentType<PollContentProps>;
506
519
  /**
507
520
  * Full override of the reaction function on Message and Message Overlay
508
521
  *
@@ -43,6 +43,7 @@ export type OverlayProviderProps<
43
43
  | 'attachmentSelectionBarHeight'
44
44
  | 'bottomInset'
45
45
  | 'CameraSelectorIcon'
46
+ | 'CreatePollIcon'
46
47
  | 'FileSelectorIcon'
47
48
  | 'ImageSelectorIcon'
48
49
  | 'topInset'
@@ -27,6 +27,7 @@ import { ImageSelectorIcon as DefaultImageSelectorIcon } from '../../components/
27
27
  import { ImageGallery } from '../../components/ImageGallery/ImageGallery';
28
28
  import { MessageOverlay } from '../../components/MessageOverlay/MessageOverlay';
29
29
  import { OverlayBackdrop } from '../../components/MessageOverlay/OverlayBackdrop';
30
+ import { CreatePollIcon as DefaultCreatePollIcon } from '../../components/Poll/components/CreatePollIcon';
30
31
  import { useStreami18n } from '../../hooks/useStreami18n';
31
32
 
32
33
  import { useViewport } from '../../hooks/useViewport';
@@ -99,6 +100,7 @@ export const OverlayProvider = <
99
100
  }, 600);
100
101
  }
101
102
  },
103
+ CreatePollIcon = DefaultCreatePollIcon,
102
104
  FileSelectorIcon = DefaultFileSelectorIcon,
103
105
  giphyVersion,
104
106
  i18nInstance,
@@ -200,6 +202,7 @@ export const OverlayProvider = <
200
202
  bottomInset,
201
203
  CameraSelectorIcon,
202
204
  closePicker: () => closePicker(bottomSheetRef),
205
+ CreatePollIcon,
203
206
  FileSelectorIcon,
204
207
  ImageSelectorIcon,
205
208
  openPicker: () => openPicker(bottomSheetRef),