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,299 @@
1
+ import React, { useCallback, useEffect, useState } from 'react';
2
+ import { StyleSheet, Switch, Text, TextInput, TouchableOpacity, View } from 'react-native';
3
+
4
+ import { ScrollView } from 'react-native-gesture-handler';
5
+ import { useSharedValue } from 'react-native-reanimated';
6
+
7
+ import { CreatePollData, PollOptionData, VotingVisibility } from 'stream-chat';
8
+
9
+ import { CreatePollOptions, CurrentOptionPositionsCache, PollModalHeader } from './components';
10
+
11
+ import {
12
+ CreatePollContentContextValue,
13
+ CreatePollContentProvider,
14
+ InputMessageInputContextValue,
15
+ useChatContext,
16
+ useCreatePollContentContext,
17
+ useTheme,
18
+ useTranslationContext,
19
+ } from '../../contexts';
20
+ import { SendPoll } from '../../icons';
21
+
22
+ export const isMaxNumberOfVotesValid = (maxNumberOfVotes: string) => {
23
+ const parsedMaxNumberOfVotes = Number(maxNumberOfVotes);
24
+
25
+ return (
26
+ !isNaN(parsedMaxNumberOfVotes) && parsedMaxNumberOfVotes > 1 && parsedMaxNumberOfVotes <= 10
27
+ );
28
+ };
29
+
30
+ export const CreatePollContent = () => {
31
+ const { t } = useTranslationContext();
32
+ const [pollTitle, setPollTitle] = useState('');
33
+ const [pollOptions, setPollOptions] = useState<PollOptionData[]>([{ text: '' }]);
34
+ const [multipleAnswersAllowed, setMultipleAnswersAllowed] = useState(false);
35
+ const [maxVotesPerPerson, setMaxVotesPerPerson] = useState('');
36
+ const [maxVotesPerPersonEnabled, setMaxVotesPerPersonEnabled] = useState(false);
37
+ const [isAnonymous, setIsAnonymous] = useState(false);
38
+ const [optionSuggestionsAllowed, setOptionSuggestionsAllowed] = useState(false);
39
+ const [commentsAllowed, setCommentsAllowed] = useState(false);
40
+ const [duplicates, setDuplicates] = useState<string[]>([]);
41
+
42
+ const { closePollCreationDialog, createAndSendPoll } = useCreatePollContentContext();
43
+
44
+ // positions and index lookup map
45
+ // TODO: Please rethink the structure of this, bidirectional data flow is not great
46
+ const currentOptionPositions = useSharedValue<CurrentOptionPositionsCache>({
47
+ inverseIndexCache: { 0: 0 },
48
+ positionCache: { 0: { updatedIndex: 0, updatedTop: 0 } },
49
+ });
50
+
51
+ const {
52
+ theme: {
53
+ colors: { accent_error, bg_user, black, white },
54
+ poll: {
55
+ createContent: {
56
+ addComment,
57
+ anonymousPoll,
58
+ headerContainer,
59
+ maxVotes,
60
+ multipleAnswers,
61
+ name,
62
+ scrollView,
63
+ sendButton,
64
+ suggestOption,
65
+ },
66
+ },
67
+ },
68
+ } = useTheme();
69
+
70
+ useEffect(() => {
71
+ const seenTexts = new Set<string>();
72
+ const duplicateTexts = new Set<string>();
73
+ for (const option of pollOptions) {
74
+ const { text } = option;
75
+ if (seenTexts.has(text)) {
76
+ duplicateTexts.add(text);
77
+ }
78
+ if (text.length > 0) {
79
+ seenTexts.add(text);
80
+ }
81
+ }
82
+
83
+ setDuplicates(Array.from(duplicateTexts));
84
+ }, [pollOptions]);
85
+
86
+ const isPollValid =
87
+ pollTitle &&
88
+ pollTitle?.length > 0 &&
89
+ duplicates.length === 0 &&
90
+ ((maxVotesPerPersonEnabled && isMaxNumberOfVotesValid(maxVotesPerPerson)) ||
91
+ !maxVotesPerPersonEnabled);
92
+
93
+ return (
94
+ <>
95
+ <View style={[styles.headerContainer, { backgroundColor: white }, headerContainer]}>
96
+ <PollModalHeader onPress={() => closePollCreationDialog?.()} title={t('Create Poll')} />
97
+ <TouchableOpacity
98
+ disabled={!isPollValid}
99
+ onPress={() => {
100
+ const currentPollOptions = Object.assign({}, pollOptions);
101
+ const reorderedPollOptions = [];
102
+
103
+ for (let i = 0; i < pollOptions.length; i++) {
104
+ const currentOption =
105
+ currentPollOptions[currentOptionPositions.value.inverseIndexCache[i]];
106
+ if (currentOption.text.length > 0) {
107
+ reorderedPollOptions.push(currentOption);
108
+ }
109
+ }
110
+
111
+ createAndSendPoll({
112
+ allow_answers: commentsAllowed,
113
+ allow_user_suggested_options: optionSuggestionsAllowed,
114
+ enforce_unique_vote: !multipleAnswersAllowed,
115
+ name: pollTitle,
116
+ options: reorderedPollOptions,
117
+ voting_visibility: isAnonymous ? VotingVisibility.anonymous : VotingVisibility.public,
118
+ ...(isMaxNumberOfVotesValid(maxVotesPerPerson) && maxVotesPerPersonEnabled
119
+ ? { max_votes_allowed: Number(maxVotesPerPerson) }
120
+ : {}),
121
+ });
122
+ }}
123
+ style={[styles.sendButton, sendButton]}
124
+ >
125
+ <SendPoll
126
+ height={24}
127
+ pathFill={isPollValid ? '#005DFF' : '#B4BBBA'}
128
+ viewBox='0 0 24 24'
129
+ width={24}
130
+ />
131
+ </TouchableOpacity>
132
+ </View>
133
+ <ScrollView
134
+ contentContainerStyle={{ paddingBottom: 70 }}
135
+ style={[styles.scrollView, { backgroundColor: white }, scrollView]}
136
+ >
137
+ <Text style={[styles.text, { color: black }, name.title]}>{t<string>('Questions')}</Text>
138
+ <TextInput
139
+ onChangeText={setPollTitle}
140
+ placeholder={t('Ask a question')}
141
+ style={[
142
+ styles.textInputWrapper,
143
+ styles.text,
144
+ { backgroundColor: bg_user, color: black },
145
+ name.input,
146
+ ]}
147
+ value={pollTitle}
148
+ />
149
+ <CreatePollOptions
150
+ currentOptionPositions={currentOptionPositions}
151
+ duplicates={duplicates}
152
+ pollOptions={pollOptions}
153
+ setPollOptions={setPollOptions}
154
+ />
155
+ <View
156
+ style={[
157
+ styles.multipleAnswersWrapper,
158
+ { backgroundColor: bg_user },
159
+ multipleAnswers.wrapper,
160
+ ]}
161
+ >
162
+ <View style={[styles.multipleAnswersRow, multipleAnswers.row]}>
163
+ <Text style={[styles.text, { color: black }, multipleAnswers.title]}>
164
+ {t<string>('Multiple answers')}
165
+ </Text>
166
+ <Switch
167
+ onValueChange={() => setMultipleAnswersAllowed(!multipleAnswersAllowed)}
168
+ value={multipleAnswersAllowed}
169
+ />
170
+ </View>
171
+ {multipleAnswersAllowed ? (
172
+ <View style={[styles.maxVotesWrapper, maxVotes.wrapper]}>
173
+ {maxVotesPerPersonEnabled && !isMaxNumberOfVotesValid(maxVotesPerPerson) ? (
174
+ <Text
175
+ style={[
176
+ styles.maxVotesValidationText,
177
+ { color: accent_error },
178
+ maxVotes.validationText,
179
+ ]}
180
+ >
181
+ {t<string>('Type a number from 2 to 10')}
182
+ </Text>
183
+ ) : null}
184
+ <View style={{ flexDirection: 'row' }}>
185
+ <TextInput
186
+ inputMode='numeric'
187
+ onChangeText={setMaxVotesPerPerson}
188
+ placeholder={t('Maximum votes per person')}
189
+ style={[styles.maxVotesInput, { color: black }, maxVotes.input]}
190
+ value={maxVotesPerPerson}
191
+ />
192
+ <Switch
193
+ onValueChange={() => setMaxVotesPerPersonEnabled(!maxVotesPerPersonEnabled)}
194
+ value={maxVotesPerPersonEnabled}
195
+ />
196
+ </View>
197
+ </View>
198
+ ) : null}
199
+ </View>
200
+ <View
201
+ style={[styles.textInputWrapper, { backgroundColor: bg_user }, anonymousPoll.wrapper]}
202
+ >
203
+ <Text style={[styles.text, { color: black }, anonymousPoll.title]}>
204
+ {t<string>('Anonymous poll')}
205
+ </Text>
206
+ <Switch onValueChange={() => setIsAnonymous(!isAnonymous)} value={isAnonymous} />
207
+ </View>
208
+ <View
209
+ style={[styles.textInputWrapper, { backgroundColor: bg_user }, suggestOption.wrapper]}
210
+ >
211
+ <Text style={[styles.text, { color: black }, suggestOption.title]}>
212
+ {t<string>('Suggest an option')}
213
+ </Text>
214
+ <Switch
215
+ onValueChange={() => setOptionSuggestionsAllowed(!optionSuggestionsAllowed)}
216
+ value={optionSuggestionsAllowed}
217
+ />
218
+ </View>
219
+ <View style={[styles.textInputWrapper, { backgroundColor: bg_user }, addComment.wrapper]}>
220
+ <Text style={[styles.text, { color: black }, addComment.title]}>
221
+ {t<string>('Add a comment')}
222
+ </Text>
223
+ <Switch
224
+ onValueChange={() => setCommentsAllowed(!commentsAllowed)}
225
+ value={commentsAllowed}
226
+ />
227
+ </View>
228
+ </ScrollView>
229
+ </>
230
+ );
231
+ };
232
+
233
+ export const CreatePoll = ({
234
+ closePollCreationDialog,
235
+ CreatePollContent: CreatePollContentOverride,
236
+ createPollOptionHeight,
237
+ sendMessage,
238
+ }: Pick<
239
+ CreatePollContentContextValue,
240
+ 'createPollOptionHeight' | 'closePollCreationDialog' | 'sendMessage'
241
+ > &
242
+ Pick<InputMessageInputContextValue, 'CreatePollContent'>) => {
243
+ const { client } = useChatContext();
244
+
245
+ const createAndSendPoll = useCallback(
246
+ async (pollData: CreatePollData) => {
247
+ const poll = await client.polls.createPoll(pollData);
248
+ await sendMessage({ customMessageData: { poll_id: poll.id } });
249
+ closePollCreationDialog?.();
250
+ },
251
+ [client, sendMessage, closePollCreationDialog],
252
+ );
253
+
254
+ return (
255
+ <CreatePollContentProvider
256
+ value={{ closePollCreationDialog, createAndSendPoll, createPollOptionHeight, sendMessage }}
257
+ >
258
+ {CreatePollContentOverride ? <CreatePollContentOverride /> : <CreatePollContent />}
259
+ </CreatePollContentProvider>
260
+ );
261
+ };
262
+
263
+ const styles = StyleSheet.create({
264
+ headerContainer: { flexDirection: 'row', justifyContent: 'space-between' },
265
+ maxVotesInput: { flex: 1, fontSize: 16 },
266
+ maxVotesValidationText: {
267
+ fontSize: 12,
268
+ left: 16,
269
+ position: 'absolute',
270
+ top: 0,
271
+ },
272
+ maxVotesWrapper: {
273
+ alignItems: 'flex-start',
274
+ flexDirection: 'column',
275
+ justifyContent: 'space-between',
276
+ paddingHorizontal: 16,
277
+ paddingVertical: 18,
278
+ },
279
+ multipleAnswersRow: {
280
+ alignItems: 'center',
281
+ flexDirection: 'row',
282
+ justifyContent: 'space-between',
283
+ paddingHorizontal: 16,
284
+ paddingVertical: 18,
285
+ },
286
+ multipleAnswersWrapper: { borderRadius: 12, marginTop: 16 },
287
+ scrollView: { flex: 1, padding: 16 },
288
+ sendButton: { paddingHorizontal: 16, paddingVertical: 18 },
289
+ text: { fontSize: 16 },
290
+ textInputWrapper: {
291
+ alignItems: 'center',
292
+ borderRadius: 12,
293
+ flexDirection: 'row',
294
+ justifyContent: 'space-between',
295
+ marginTop: 16,
296
+ paddingHorizontal: 16,
297
+ paddingVertical: 18,
298
+ },
299
+ });
@@ -0,0 +1,126 @@
1
+ import React, { useMemo } from 'react';
2
+ import { StyleSheet, Text, View } from 'react-native';
3
+
4
+ import { PollOption as PollOptionClass } from 'stream-chat';
5
+
6
+ import {
7
+ AddCommentButton,
8
+ EndVoteButton,
9
+ PollOption,
10
+ ShowAllCommentsButton,
11
+ ShowAllOptionsButton,
12
+ SuggestOptionButton,
13
+ ViewResultsButton,
14
+ } from './components';
15
+
16
+ import { usePollState } from './hooks/usePollState';
17
+
18
+ import {
19
+ MessagesContextValue,
20
+ PollContextProvider,
21
+ PollContextValue,
22
+ useTheme,
23
+ useTranslationContext,
24
+ } from '../../contexts';
25
+ import type { DefaultStreamChatGenerics } from '../../types/types';
26
+
27
+ export type PollProps<
28
+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
29
+ > = Pick<PollContextValue<StreamChatGenerics>, 'poll' | 'message'> &
30
+ Pick<MessagesContextValue<StreamChatGenerics>, 'PollContent'>;
31
+
32
+ export type PollContentProps = {
33
+ PollButtons?: React.ComponentType;
34
+ PollHeader?: React.ComponentType;
35
+ };
36
+
37
+ export const PollButtons = () => (
38
+ <>
39
+ <ShowAllOptionsButton />
40
+ <ShowAllCommentsButton />
41
+ <SuggestOptionButton />
42
+ <AddCommentButton />
43
+ <ViewResultsButton />
44
+ <EndVoteButton />
45
+ </>
46
+ );
47
+
48
+ export const PollHeader = () => {
49
+ const { t } = useTranslationContext();
50
+ const { enforce_unique_vote, is_closed, max_votes_allowed, name } = usePollState();
51
+ const subtitle = useMemo(() => {
52
+ if (is_closed) return t('Vote ended');
53
+ if (enforce_unique_vote) return t('Select one');
54
+ if (max_votes_allowed) return t('Select up to {{count}}', { count: max_votes_allowed });
55
+ return t('Select one or more');
56
+ }, [is_closed, t, enforce_unique_vote, max_votes_allowed]);
57
+
58
+ const {
59
+ theme: {
60
+ colors: { text_high_emphasis, text_low_emphasis },
61
+ poll: {
62
+ message: { header },
63
+ },
64
+ },
65
+ } = useTheme();
66
+
67
+ return (
68
+ <>
69
+ <Text style={[styles.headerTitle, { color: text_high_emphasis }, header.title]}>{name}</Text>
70
+ <Text style={[styles.headerSubtitle, { color: text_low_emphasis }, header.subtitle]}>
71
+ {subtitle}
72
+ </Text>
73
+ </>
74
+ );
75
+ };
76
+
77
+ export const PollContent = ({
78
+ PollButtons: PollButtonsOverride,
79
+ PollHeader: PollHeaderOverride,
80
+ }: PollContentProps) => {
81
+ const { options } = usePollState();
82
+
83
+ const {
84
+ theme: {
85
+ poll: {
86
+ message: { container, optionsWrapper },
87
+ },
88
+ },
89
+ } = useTheme();
90
+
91
+ return (
92
+ <View style={[styles.container, container]}>
93
+ {PollHeaderOverride ? <PollHeaderOverride /> : <PollHeader />}
94
+ <View style={[styles.optionsWrapper, optionsWrapper]}>
95
+ {options?.slice(0, 10)?.map((option: PollOptionClass) => (
96
+ <PollOption key={`message_poll_option_${option.id}`} option={option} />
97
+ ))}
98
+ </View>
99
+ {PollButtonsOverride ? <PollButtonsOverride /> : <PollButtons />}
100
+ </View>
101
+ );
102
+ };
103
+
104
+ export const Poll = <
105
+ StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics,
106
+ >({
107
+ message,
108
+ poll,
109
+ PollContent: PollContentOverride,
110
+ }: PollProps<StreamChatGenerics>) => (
111
+ <PollContextProvider
112
+ value={{
113
+ message,
114
+ poll,
115
+ }}
116
+ >
117
+ {PollContentOverride ? <PollContentOverride /> : <PollContent />}
118
+ </PollContextProvider>
119
+ );
120
+
121
+ const styles = StyleSheet.create({
122
+ container: { padding: 15, width: 270 },
123
+ headerSubtitle: { fontSize: 12, marginTop: 4 },
124
+ headerTitle: { fontSize: 16, fontWeight: '500' },
125
+ optionsWrapper: { marginTop: 12 },
126
+ });