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.
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js +27 -0
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js.map +1 -1
- package/lib/commonjs/components/Channel/Channel.js +17 -4
- package/lib/commonjs/components/Channel/Channel.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js +7 -1
- package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +5 -1
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js +46 -3
- package/lib/commonjs/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
- package/lib/commonjs/components/Chat/Chat.js +2 -0
- package/lib/commonjs/components/Chat/Chat.js.map +1 -1
- package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js +10 -0
- package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
- package/lib/commonjs/components/Message/Message.js +13 -0
- package/lib/commonjs/components/Message/Message.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +31 -15
- package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
- package/lib/commonjs/components/MessageInput/MessageInput.js +44 -1
- package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/commonjs/components/MessageInput/components/NativeAttachmentPicker.js +18 -1
- package/lib/commonjs/components/MessageInput/components/NativeAttachmentPicker.js.map +1 -1
- package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +10 -0
- package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +1 -1
- package/lib/commonjs/components/Poll/CreatePollContent.js +386 -0
- package/lib/commonjs/components/Poll/CreatePollContent.js.map +1 -0
- package/lib/commonjs/components/Poll/Poll.js +112 -0
- package/lib/commonjs/components/Poll/Poll.js.map +1 -0
- package/lib/commonjs/components/Poll/components/Button.js +513 -0
- package/lib/commonjs/components/Poll/components/Button.js.map +1 -0
- package/lib/commonjs/components/Poll/components/CreatePollIcon.js +23 -0
- package/lib/commonjs/components/Poll/components/CreatePollIcon.js.map +1 -0
- package/lib/commonjs/components/Poll/components/CreatePollOptions.js +281 -0
- package/lib/commonjs/components/Poll/components/CreatePollOptions.js.map +1 -0
- package/lib/commonjs/components/Poll/components/PollAnswersList.js +154 -0
- package/lib/commonjs/components/Poll/components/PollAnswersList.js.map +1 -0
- package/lib/commonjs/components/Poll/components/PollInputDialog.js +139 -0
- package/lib/commonjs/components/Poll/components/PollInputDialog.js.map +1 -0
- package/lib/commonjs/components/Poll/components/PollModalHeader.js +60 -0
- package/lib/commonjs/components/Poll/components/PollModalHeader.js.map +1 -0
- package/lib/commonjs/components/Poll/components/PollOption.js +209 -0
- package/lib/commonjs/components/Poll/components/PollOption.js.map +1 -0
- package/lib/commonjs/components/Poll/components/PollResults/PollOptionFullResults.js +123 -0
- package/lib/commonjs/components/Poll/components/PollResults/PollOptionFullResults.js.map +1 -0
- package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js +152 -0
- package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js.map +1 -0
- package/lib/commonjs/components/Poll/components/PollResults/PollResults.js +101 -0
- package/lib/commonjs/components/Poll/components/PollResults/PollResults.js.map +1 -0
- package/lib/commonjs/components/Poll/components/PollResults/index.js +37 -0
- package/lib/commonjs/components/Poll/components/PollResults/index.js.map +1 -0
- package/lib/commonjs/components/Poll/components/index.js +92 -0
- package/lib/commonjs/components/Poll/components/index.js.map +1 -0
- package/lib/commonjs/components/Poll/hooks/usePollAnswersPagination.js +129 -0
- package/lib/commonjs/components/Poll/hooks/usePollAnswersPagination.js.map +1 -0
- package/lib/commonjs/components/Poll/hooks/usePollOptionVotesPagination.js +140 -0
- package/lib/commonjs/components/Poll/hooks/usePollOptionVotesPagination.js.map +1 -0
- package/lib/commonjs/components/Poll/hooks/usePollState.js +103 -0
- package/lib/commonjs/components/Poll/hooks/usePollState.js.map +1 -0
- package/lib/commonjs/components/Poll/hooks/usePollStateStore.js +13 -0
- package/lib/commonjs/components/Poll/hooks/usePollStateStore.js.map +1 -0
- package/lib/commonjs/components/Poll/index.js +81 -0
- package/lib/commonjs/components/Poll/index.js.map +1 -0
- package/lib/commonjs/components/Reply/Reply.js +1 -1
- package/lib/commonjs/components/Reply/Reply.js.map +1 -1
- package/lib/commonjs/components/index.js +11 -0
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
- package/lib/commonjs/contexts/index.js +11 -0
- package/lib/commonjs/contexts/index.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +26 -3
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +9 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
- package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/commonjs/contexts/overlayContext/OverlayContext.js.map +1 -1
- package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +4 -0
- package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
- package/lib/commonjs/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js +3 -0
- package/lib/commonjs/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js.map +1 -1
- package/lib/commonjs/contexts/pollContext/createPollContentContext.js +33 -0
- package/lib/commonjs/contexts/pollContext/createPollContentContext.js.map +1 -0
- package/lib/commonjs/contexts/pollContext/index.js +26 -0
- package/lib/commonjs/contexts/pollContext/index.js.map +1 -0
- package/lib/commonjs/contexts/pollContext/pollContext.js +33 -0
- package/lib/commonjs/contexts/pollContext/pollContext.js.map +1 -0
- package/lib/commonjs/contexts/themeContext/utils/theme.js +126 -0
- package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/commonjs/i18n/en.json +34 -0
- package/lib/commonjs/i18n/es.json +38 -0
- package/lib/commonjs/i18n/fr.json +38 -0
- package/lib/commonjs/i18n/he.json +38 -0
- package/lib/commonjs/i18n/hi.json +34 -0
- package/lib/commonjs/i18n/it.json +38 -0
- package/lib/commonjs/i18n/ja.json +34 -0
- package/lib/commonjs/i18n/ko.json +34 -0
- package/lib/commonjs/i18n/nl.json +34 -0
- package/lib/commonjs/i18n/pt-br.json +38 -0
- package/lib/commonjs/i18n/ru.json +42 -0
- package/lib/commonjs/i18n/tr.json +34 -0
- package/lib/commonjs/icons/Back.js +19 -0
- package/lib/commonjs/icons/Back.js.map +1 -0
- package/lib/commonjs/icons/DragHandle.js +21 -0
- package/lib/commonjs/icons/DragHandle.js.map +1 -0
- package/lib/commonjs/icons/PollThumbnail.js +19 -0
- package/lib/commonjs/icons/PollThumbnail.js.map +1 -0
- package/lib/commonjs/icons/SendPoll.js +19 -0
- package/lib/commonjs/icons/SendPoll.js.map +1 -0
- package/lib/commonjs/icons/index.js +44 -0
- package/lib/commonjs/icons/index.js.map +1 -1
- package/lib/commonjs/store/QuickSqliteClient.js +1 -1
- package/lib/commonjs/store/apis/index.js +11 -0
- package/lib/commonjs/store/apis/index.js.map +1 -1
- package/lib/commonjs/store/apis/updatePollMessage.js +50 -0
- package/lib/commonjs/store/apis/updatePollMessage.js.map +1 -0
- package/lib/commonjs/store/mappers/mapMessageToStorable.js +5 -1
- package/lib/commonjs/store/mappers/mapMessageToStorable.js.map +1 -1
- package/lib/commonjs/store/mappers/mapStorableToMessage.js +5 -1
- package/lib/commonjs/store/mappers/mapStorableToMessage.js.map +1 -1
- package/lib/commonjs/store/schema.js +2 -0
- package/lib/commonjs/store/schema.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js +27 -0
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js.map +1 -1
- package/lib/module/components/Channel/Channel.js +17 -4
- package/lib/module/components/Channel/Channel.js.map +1 -1
- package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js +7 -1
- package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +5 -1
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js +46 -3
- package/lib/module/components/ChannelPreview/hooks/useLatestMessagePreview.js.map +1 -1
- package/lib/module/components/Chat/Chat.js +2 -0
- package/lib/module/components/Chat/Chat.js.map +1 -1
- package/lib/module/components/Chat/hooks/handleEventToSyncDB.js +10 -0
- package/lib/module/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
- package/lib/module/components/Message/Message.js +13 -0
- package/lib/module/components/Message/Message.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageContent.js +31 -15
- package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
- package/lib/module/components/MessageInput/MessageInput.js +44 -1
- package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/module/components/MessageInput/components/NativeAttachmentPicker.js +18 -1
- package/lib/module/components/MessageInput/components/NativeAttachmentPicker.js.map +1 -1
- package/lib/module/components/MessageOverlay/MessageOverlay.js +10 -0
- package/lib/module/components/MessageOverlay/MessageOverlay.js.map +1 -1
- package/lib/module/components/Poll/CreatePollContent.js +386 -0
- package/lib/module/components/Poll/CreatePollContent.js.map +1 -0
- package/lib/module/components/Poll/Poll.js +112 -0
- package/lib/module/components/Poll/Poll.js.map +1 -0
- package/lib/module/components/Poll/components/Button.js +513 -0
- package/lib/module/components/Poll/components/Button.js.map +1 -0
- package/lib/module/components/Poll/components/CreatePollIcon.js +23 -0
- package/lib/module/components/Poll/components/CreatePollIcon.js.map +1 -0
- package/lib/module/components/Poll/components/CreatePollOptions.js +281 -0
- package/lib/module/components/Poll/components/CreatePollOptions.js.map +1 -0
- package/lib/module/components/Poll/components/PollAnswersList.js +154 -0
- package/lib/module/components/Poll/components/PollAnswersList.js.map +1 -0
- package/lib/module/components/Poll/components/PollInputDialog.js +139 -0
- package/lib/module/components/Poll/components/PollInputDialog.js.map +1 -0
- package/lib/module/components/Poll/components/PollModalHeader.js +60 -0
- package/lib/module/components/Poll/components/PollModalHeader.js.map +1 -0
- package/lib/module/components/Poll/components/PollOption.js +209 -0
- package/lib/module/components/Poll/components/PollOption.js.map +1 -0
- package/lib/module/components/Poll/components/PollResults/PollOptionFullResults.js +123 -0
- package/lib/module/components/Poll/components/PollResults/PollOptionFullResults.js.map +1 -0
- package/lib/module/components/Poll/components/PollResults/PollResultItem.js +152 -0
- package/lib/module/components/Poll/components/PollResults/PollResultItem.js.map +1 -0
- package/lib/module/components/Poll/components/PollResults/PollResults.js +101 -0
- package/lib/module/components/Poll/components/PollResults/PollResults.js.map +1 -0
- package/lib/module/components/Poll/components/PollResults/index.js +37 -0
- package/lib/module/components/Poll/components/PollResults/index.js.map +1 -0
- package/lib/module/components/Poll/components/index.js +92 -0
- package/lib/module/components/Poll/components/index.js.map +1 -0
- package/lib/module/components/Poll/hooks/usePollAnswersPagination.js +129 -0
- package/lib/module/components/Poll/hooks/usePollAnswersPagination.js.map +1 -0
- package/lib/module/components/Poll/hooks/usePollOptionVotesPagination.js +140 -0
- package/lib/module/components/Poll/hooks/usePollOptionVotesPagination.js.map +1 -0
- package/lib/module/components/Poll/hooks/usePollState.js +103 -0
- package/lib/module/components/Poll/hooks/usePollState.js.map +1 -0
- package/lib/module/components/Poll/hooks/usePollStateStore.js +13 -0
- package/lib/module/components/Poll/hooks/usePollStateStore.js.map +1 -0
- package/lib/module/components/Poll/index.js +81 -0
- package/lib/module/components/Poll/index.js.map +1 -0
- package/lib/module/components/Reply/Reply.js +1 -1
- package/lib/module/components/Reply/Reply.js.map +1 -1
- package/lib/module/components/index.js +11 -0
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
- package/lib/module/contexts/index.js +11 -0
- package/lib/module/contexts/index.js.map +1 -1
- package/lib/module/contexts/messageInputContext/MessageInputContext.js +26 -3
- package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +9 -1
- package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
- package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +1 -1
- package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/module/contexts/overlayContext/OverlayContext.js.map +1 -1
- package/lib/module/contexts/overlayContext/OverlayProvider.js +4 -0
- package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
- package/lib/module/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js +3 -0
- package/lib/module/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.js.map +1 -1
- package/lib/module/contexts/pollContext/createPollContentContext.js +33 -0
- package/lib/module/contexts/pollContext/createPollContentContext.js.map +1 -0
- package/lib/module/contexts/pollContext/index.js +26 -0
- package/lib/module/contexts/pollContext/index.js.map +1 -0
- package/lib/module/contexts/pollContext/pollContext.js +33 -0
- package/lib/module/contexts/pollContext/pollContext.js.map +1 -0
- package/lib/module/contexts/themeContext/utils/theme.js +126 -0
- package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/module/i18n/en.json +34 -0
- package/lib/module/i18n/es.json +38 -0
- package/lib/module/i18n/fr.json +38 -0
- package/lib/module/i18n/he.json +38 -0
- package/lib/module/i18n/hi.json +34 -0
- package/lib/module/i18n/it.json +38 -0
- package/lib/module/i18n/ja.json +34 -0
- package/lib/module/i18n/ko.json +34 -0
- package/lib/module/i18n/nl.json +34 -0
- package/lib/module/i18n/pt-br.json +38 -0
- package/lib/module/i18n/ru.json +42 -0
- package/lib/module/i18n/tr.json +34 -0
- package/lib/module/icons/Back.js +19 -0
- package/lib/module/icons/Back.js.map +1 -0
- package/lib/module/icons/DragHandle.js +21 -0
- package/lib/module/icons/DragHandle.js.map +1 -0
- package/lib/module/icons/PollThumbnail.js +19 -0
- package/lib/module/icons/PollThumbnail.js.map +1 -0
- package/lib/module/icons/SendPoll.js +19 -0
- package/lib/module/icons/SendPoll.js.map +1 -0
- package/lib/module/icons/index.js +44 -0
- package/lib/module/icons/index.js.map +1 -1
- package/lib/module/store/QuickSqliteClient.js +1 -1
- package/lib/module/store/apis/index.js +11 -0
- package/lib/module/store/apis/index.js.map +1 -1
- package/lib/module/store/apis/updatePollMessage.js +50 -0
- package/lib/module/store/apis/updatePollMessage.js.map +1 -0
- package/lib/module/store/mappers/mapMessageToStorable.js +5 -1
- package/lib/module/store/mappers/mapMessageToStorable.js.map +1 -1
- package/lib/module/store/mappers/mapStorableToMessage.js +5 -1
- package/lib/module/store/mappers/mapStorableToMessage.js.map +1 -1
- package/lib/module/store/schema.js +2 -0
- package/lib/module/store/schema.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerSelectionBar.d.ts.map +1 -1
- package/lib/typescript/components/Channel/Channel.d.ts +2 -2
- package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts.map +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts.map +1 -1
- package/lib/typescript/components/ChannelPreview/hooks/useLatestMessagePreview.d.ts +5 -1
- package/lib/typescript/components/ChannelPreview/hooks/useLatestMessagePreview.d.ts.map +1 -1
- package/lib/typescript/components/Chat/Chat.d.ts.map +1 -1
- package/lib/typescript/components/Chat/hooks/handleEventToSyncDB.d.ts.map +1 -1
- package/lib/typescript/components/Message/Message.d.ts +1 -1
- package/lib/typescript/components/Message/Message.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/MessageInput.d.ts +1 -1
- package/lib/typescript/components/MessageInput/MessageInput.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/components/NativeAttachmentPicker.d.ts.map +1 -1
- package/lib/typescript/components/MessageOverlay/MessageOverlay.d.ts.map +1 -1
- package/lib/typescript/components/Poll/CreatePollContent.d.ts +6 -0
- package/lib/typescript/components/Poll/CreatePollContent.d.ts.map +1 -0
- package/lib/typescript/components/Poll/Poll.d.ts +13 -0
- package/lib/typescript/components/Poll/Poll.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/Button.d.ts +35 -0
- package/lib/typescript/components/Poll/components/Button.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/CreatePollIcon.d.ts +3 -0
- package/lib/typescript/components/Poll/components/CreatePollIcon.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/CreatePollOptions.d.ts +34 -0
- package/lib/typescript/components/Poll/components/CreatePollOptions.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/PollAnswersList.d.ts +15 -0
- package/lib/typescript/components/Poll/components/PollAnswersList.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/PollInputDialog.d.ts +10 -0
- package/lib/typescript/components/Poll/components/PollInputDialog.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/PollModalHeader.d.ts +7 -0
- package/lib/typescript/components/Poll/components/PollModalHeader.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/PollOption.d.ts +16 -0
- package/lib/typescript/components/Poll/components/PollOption.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/PollResults/PollOptionFullResults.d.ts +18 -0
- package/lib/typescript/components/Poll/components/PollResults/PollOptionFullResults.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts +9 -0
- package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/PollResults/PollResults.d.ts +10 -0
- package/lib/typescript/components/Poll/components/PollResults/PollResults.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/PollResults/index.d.ts +4 -0
- package/lib/typescript/components/Poll/components/PollResults/index.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/index.d.ts +9 -0
- package/lib/typescript/components/Poll/components/index.d.ts.map +1 -0
- package/lib/typescript/components/Poll/hooks/usePollAnswersPagination.d.ts +29 -0
- package/lib/typescript/components/Poll/hooks/usePollAnswersPagination.d.ts.map +1 -0
- package/lib/typescript/components/Poll/hooks/usePollOptionVotesPagination.d.ts +32 -0
- package/lib/typescript/components/Poll/hooks/usePollOptionVotesPagination.d.ts.map +1 -0
- package/lib/typescript/components/Poll/hooks/usePollState.d.ts +26 -0
- package/lib/typescript/components/Poll/hooks/usePollState.d.ts.map +1 -0
- package/lib/typescript/components/Poll/hooks/usePollStateStore.d.ts +3 -0
- package/lib/typescript/components/Poll/hooks/usePollStateStore.d.ts.map +1 -0
- package/lib/typescript/components/Poll/index.d.ts +8 -0
- package/lib/typescript/components/Poll/index.d.ts.map +1 -0
- package/lib/typescript/components/Reply/Reply.d.ts.map +1 -1
- package/lib/typescript/components/index.d.ts +1 -0
- package/lib/typescript/components/index.d.ts.map +1 -1
- package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts +7 -1
- package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts.map +1 -1
- package/lib/typescript/contexts/index.d.ts +1 -0
- package/lib/typescript/contexts/index.d.ts.map +1 -1
- package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +11 -2
- package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts.map +1 -1
- package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts +1 -1
- package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts.map +1 -1
- package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +2 -1
- package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts.map +1 -1
- package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +9 -1
- package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts.map +1 -1
- package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts +1 -1
- package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts.map +1 -1
- package/lib/typescript/contexts/overlayContext/OverlayProvider.d.ts.map +1 -1
- package/lib/typescript/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.d.ts +3 -0
- package/lib/typescript/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.d.ts.map +1 -1
- package/lib/typescript/contexts/pollContext/createPollContentContext.d.ts +20 -0
- package/lib/typescript/contexts/pollContext/createPollContentContext.d.ts.map +1 -0
- package/lib/typescript/contexts/pollContext/index.d.ts +3 -0
- package/lib/typescript/contexts/pollContext/index.d.ts.map +1 -0
- package/lib/typescript/contexts/pollContext/pollContext.d.ts +14 -0
- package/lib/typescript/contexts/pollContext/pollContext.d.ts.map +1 -0
- package/lib/typescript/contexts/themeContext/utils/theme.d.ts +126 -0
- package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
- package/lib/typescript/i18n/en.json +34 -0
- package/lib/typescript/i18n/es.json +38 -0
- package/lib/typescript/i18n/fr.json +38 -0
- package/lib/typescript/i18n/he.json +38 -0
- package/lib/typescript/i18n/hi.json +34 -0
- package/lib/typescript/i18n/it.json +38 -0
- package/lib/typescript/i18n/ja.json +34 -0
- package/lib/typescript/i18n/ko.json +34 -0
- package/lib/typescript/i18n/nl.json +34 -0
- package/lib/typescript/i18n/pt-br.json +38 -0
- package/lib/typescript/i18n/ru.json +42 -0
- package/lib/typescript/i18n/tr.json +34 -0
- package/lib/typescript/icons/Back.d.ts +4 -0
- package/lib/typescript/icons/Back.d.ts.map +1 -0
- package/lib/typescript/icons/DragHandle.d.ts +4 -0
- package/lib/typescript/icons/DragHandle.d.ts.map +1 -0
- package/lib/typescript/icons/PollThumbnail.d.ts +4 -0
- package/lib/typescript/icons/PollThumbnail.d.ts.map +1 -0
- package/lib/typescript/icons/SendPoll.d.ts +4 -0
- package/lib/typescript/icons/SendPoll.d.ts.map +1 -0
- package/lib/typescript/icons/index.d.ts +4 -0
- package/lib/typescript/icons/index.d.ts.map +1 -1
- package/lib/typescript/store/apis/index.d.ts +1 -0
- package/lib/typescript/store/apis/index.d.ts.map +1 -1
- package/lib/typescript/store/apis/updatePollMessage.d.ts +7 -0
- package/lib/typescript/store/apis/updatePollMessage.d.ts.map +1 -0
- package/lib/typescript/store/mappers/mapMessageToStorable.d.ts.map +1 -1
- package/lib/typescript/store/mappers/mapStorableToMessage.d.ts.map +1 -1
- package/lib/typescript/store/schema.d.ts +2 -0
- package/lib/typescript/store/schema.d.ts.map +1 -1
- package/lib/typescript/utils/i18n/Streami18n.d.ts +34 -0
- package/lib/typescript/utils/i18n/Streami18n.d.ts.map +1 -1
- package/package.json +2 -2
- package/src/components/AttachmentPicker/components/AttachmentPickerSelectionBar.tsx +35 -2
- package/src/components/Channel/Channel.tsx +27 -4
- package/src/components/Channel/hooks/useCreateInputMessageInputContext.ts +16 -1
- package/src/components/Channel/hooks/useCreateMessagesContext.ts +5 -0
- package/src/components/ChannelPreview/hooks/useLatestMessagePreview.ts +63 -4
- package/src/components/Chat/Chat.tsx +2 -0
- package/src/components/Chat/hooks/handleEventToSyncDB.ts +19 -0
- package/src/components/Message/Message.tsx +15 -1
- package/src/components/Message/MessageSimple/MessageContent.tsx +16 -0
- package/src/components/MessageInput/MessageInput.tsx +58 -1
- package/src/components/MessageInput/__tests__/MessageInput.test.js +2 -0
- package/src/components/MessageInput/components/NativeAttachmentPicker.tsx +29 -2
- package/src/components/MessageOverlay/MessageOverlay.tsx +10 -0
- package/src/components/Poll/CreatePollContent.tsx +299 -0
- package/src/components/Poll/Poll.tsx +126 -0
- package/src/components/Poll/components/Button.tsx +465 -0
- package/src/components/Poll/components/CreatePollIcon.tsx +14 -0
- package/src/components/Poll/components/CreatePollOptions.tsx +351 -0
- package/src/components/Poll/components/PollAnswersList.tsx +134 -0
- package/src/components/Poll/components/PollInputDialog.tsx +117 -0
- package/src/components/Poll/components/PollModalHeader.tsx +42 -0
- package/src/components/Poll/components/PollOption.tsx +172 -0
- package/src/components/Poll/components/PollResults/PollOptionFullResults.tsx +108 -0
- package/src/components/Poll/components/PollResults/PollResultItem.tsx +115 -0
- package/src/components/Poll/components/PollResults/PollResults.tsx +79 -0
- package/src/components/Poll/components/PollResults/index.ts +3 -0
- package/src/components/Poll/components/index.ts +8 -0
- package/src/components/Poll/hooks/usePollAnswersPagination.ts +109 -0
- package/src/components/Poll/hooks/usePollOptionVotesPagination.ts +119 -0
- package/src/components/Poll/hooks/usePollState.ts +122 -0
- package/src/components/Poll/hooks/usePollStateStore.ts +13 -0
- package/src/components/Poll/index.ts +10 -0
- package/src/components/Reply/Reply.tsx +2 -0
- package/src/components/index.ts +1 -0
- package/src/contexts/attachmentPickerContext/AttachmentPickerContext.tsx +12 -1
- package/src/contexts/index.ts +1 -0
- package/src/contexts/messageInputContext/MessageInputContext.tsx +38 -10
- package/src/contexts/messageInputContext/__tests__/pickFile.test.tsx +4 -2
- package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +9 -0
- package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +2 -1
- package/src/contexts/messagesContext/MessagesContext.tsx +15 -2
- package/src/contexts/overlayContext/OverlayContext.tsx +1 -0
- package/src/contexts/overlayContext/OverlayProvider.tsx +3 -0
- package/src/contexts/ownCapabilitiesContext/OwnCapabilitiesContext.tsx +3 -0
- package/src/contexts/pollContext/createPollContentContext.tsx +49 -0
- package/src/contexts/pollContext/index.ts +2 -0
- package/src/contexts/pollContext/pollContext.tsx +43 -0
- package/src/contexts/themeContext/utils/theme.ts +233 -0
- package/src/i18n/en.json +34 -0
- package/src/i18n/es.json +38 -0
- package/src/i18n/fr.json +38 -0
- package/src/i18n/he.json +38 -0
- package/src/i18n/hi.json +34 -0
- package/src/i18n/it.json +38 -0
- package/src/i18n/ja.json +34 -0
- package/src/i18n/ko.json +34 -0
- package/src/i18n/nl.json +34 -0
- package/src/i18n/pt-br.json +38 -0
- package/src/i18n/ru.json +42 -0
- package/src/i18n/tr.json +34 -0
- package/src/icons/Back.tsx +12 -0
- package/src/icons/DragHandle.tsx +9 -0
- package/src/icons/PollThumbnail.tsx +12 -0
- package/src/icons/SendPoll.tsx +12 -0
- package/src/icons/index.ts +4 -0
- package/src/store/QuickSqliteClient.ts +1 -1
- package/src/store/apis/index.ts +1 -0
- package/src/store/apis/updatePollMessage.ts +48 -0
- package/src/store/mappers/mapMessageToStorable.ts +4 -0
- package/src/store/mappers/mapStorableToMessage.ts +4 -0
- package/src/store/schema.ts +4 -0
- 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)}...`
|
package/src/components/index.ts
CHANGED
|
@@ -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
|
-
|
|
107
|
+
| 'CameraSelectorIcon'
|
|
108
|
+
| 'closePicker'
|
|
109
|
+
| 'CreatePollIcon'
|
|
110
|
+
| 'FileSelectorIcon'
|
|
111
|
+
| 'ImageSelectorIcon'
|
|
112
|
+
| 'openPicker'
|
|
102
113
|
> &
|
|
103
114
|
Partial<Pick<AttachmentPickerContextValue, 'bottomInset' | 'topInset'>>;
|
|
104
115
|
}>) => {
|
package/src/contexts/index.ts
CHANGED
|
@@ -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
|
|
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
|
|
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 =
|
|
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
|
*
|
|
@@ -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),
|