stream-chat-react-native-core 5.44.2 → 6.0.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/README.md +1 -2
- package/lib/commonjs/components/Attachment/Attachment.js +1 -1
- package/lib/commonjs/components/Attachment/Attachment.js.map +1 -1
- package/lib/commonjs/components/Attachment/Card.js +6 -6
- package/lib/commonjs/components/Attachment/Card.js.map +1 -1
- package/lib/commonjs/components/Attachment/FileAttachment.js +5 -5
- package/lib/commonjs/components/Attachment/FileAttachment.js.map +1 -1
- package/lib/commonjs/components/Attachment/FileAttachmentGroup.js +1 -1
- package/lib/commonjs/components/Attachment/FileAttachmentGroup.js.map +1 -1
- package/lib/commonjs/components/Attachment/Gallery.js +32 -23
- package/lib/commonjs/components/Attachment/Gallery.js.map +1 -1
- package/lib/commonjs/components/Attachment/Giphy.js +8 -8
- package/lib/commonjs/components/Attachment/Giphy.js.map +1 -1
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildGallery.js +7 -0
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildGallery.js.map +1 -1
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js +3 -1
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js.map +1 -1
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js +3 -0
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js.map +1 -1
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js +4 -0
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js.map +1 -1
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js +2 -0
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnailGrid.js +2 -0
- package/lib/commonjs/components/Attachment/utils/buildGallery/buildThumbnailGrid.js.map +1 -1
- package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js +2 -2
- package/lib/commonjs/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js +40 -136
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js +9 -6
- package/lib/commonjs/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js.map +1 -1
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js +1 -2
- package/lib/commonjs/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
- package/lib/commonjs/components/Avatar/Avatar.js +4 -0
- package/lib/commonjs/components/Avatar/Avatar.js.map +1 -1
- package/lib/commonjs/components/Avatar/GroupAvatar.js +4 -0
- package/lib/commonjs/components/Avatar/GroupAvatar.js.map +1 -1
- package/lib/commonjs/components/Channel/Channel.js +576 -1262
- package/lib/commonjs/components/Channel/Channel.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useChannelDataState.js +174 -0
- package/lib/commonjs/components/Channel/hooks/useChannelDataState.js.map +1 -0
- package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js +0 -8
- package/lib/commonjs/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js +2 -2
- package/lib/commonjs/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js +26 -10
- package/lib/commonjs/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useCreatePaginatedMessageListContext.js +3 -3
- package/lib/commonjs/components/Channel/hooks/useCreatePaginatedMessageListContext.js.map +1 -1
- package/lib/commonjs/components/Channel/hooks/useMessageListPagination.js +324 -0
- package/lib/commonjs/components/Channel/hooks/useMessageListPagination.js.map +1 -0
- package/lib/commonjs/components/ChannelList/ChannelList.js +0 -2
- package/lib/commonjs/components/ChannelList/ChannelList.js.map +1 -1
- package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js +1 -1
- package/lib/commonjs/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
- package/lib/commonjs/components/ChannelList/Skeleton.js +7 -3
- package/lib/commonjs/components/ChannelList/Skeleton.js.map +1 -1
- package/lib/commonjs/components/ChannelList/hooks/listeners/useNewMessageNotification.js +8 -18
- package/lib/commonjs/components/ChannelList/hooks/listeners/useNewMessageNotification.js.map +1 -1
- package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js +85 -46
- package/lib/commonjs/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
- package/lib/commonjs/components/Chat/Chat.js +31 -16
- package/lib/commonjs/components/Chat/Chat.js.map +1 -1
- package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js +312 -173
- package/lib/commonjs/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
- package/lib/commonjs/components/Chat/hooks/useAppSettings.js +31 -18
- package/lib/commonjs/components/Chat/hooks/useAppSettings.js.map +1 -1
- package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js +0 -2
- package/lib/commonjs/components/Chat/hooks/useCreateChatContext.js.map +1 -1
- package/lib/commonjs/components/Chat/hooks/useIsOnline.js +16 -13
- package/lib/commonjs/components/Chat/hooks/useIsOnline.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/ImageGallery.js +57 -96
- package/lib/commonjs/components/ImageGallery/ImageGallery.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryImage.js +14 -35
- package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryImage.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js +17 -35
- package/lib/commonjs/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js +72 -64
- package/lib/commonjs/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js +38 -39
- package/lib/commonjs/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/components/ImageGalleryOverlay.js.map +1 -1
- package/lib/commonjs/components/ImageGallery/hooks/useAnimatedGalleryStyle.js +54 -0
- package/lib/commonjs/components/ImageGallery/hooks/useAnimatedGalleryStyle.js.map +1 -0
- package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js +230 -225
- package/lib/commonjs/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
- package/lib/commonjs/components/Indicators/LoadingIndicator.js +1 -1
- package/lib/commonjs/components/Indicators/LoadingIndicator.js.map +1 -1
- package/lib/commonjs/components/Message/Message.js +136 -192
- package/lib/commonjs/components/Message/Message.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageAvatar.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageBounce.js +23 -6
- package/lib/commonjs/components/Message/MessageSimple/MessageBounce.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageContent.js +40 -145
- package/lib/commonjs/components/Message/MessageSimple/MessageContent.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js +0 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageFooter.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js +20 -34
- package/lib/commonjs/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js +182 -44
- package/lib/commonjs/components/Message/MessageSimple/MessageSimple.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js +1 -1
- package/lib/commonjs/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
- package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListBottom.js +234 -0
- package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListBottom.js.map +1 -0
- package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListTop.js +195 -0
- package/lib/commonjs/components/Message/MessageSimple/ReactionList/ReactionListTop.js.map +1 -0
- package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js +4 -16
- package/lib/commonjs/components/Message/hooks/useCreateMessageContext.js.map +1 -1
- package/lib/commonjs/components/Message/hooks/useMessageActions.js +36 -72
- package/lib/commonjs/components/Message/hooks/useMessageActions.js.map +1 -1
- package/lib/commonjs/components/Message/hooks/useMessageData.js +38 -0
- package/lib/commonjs/components/Message/hooks/useMessageData.js.map +1 -0
- package/lib/commonjs/components/Message/hooks/useProcessReactions.js +3 -3
- package/lib/commonjs/components/Message/hooks/useProcessReactions.js.map +1 -1
- package/lib/commonjs/components/Message/utils/messageActions.js +4 -6
- package/lib/commonjs/components/Message/utils/messageActions.js.map +1 -1
- package/lib/commonjs/components/MessageInput/FileUploadPreview.js +1 -1
- package/lib/commonjs/components/MessageInput/FileUploadPreview.js.map +1 -1
- package/lib/commonjs/components/MessageInput/MessageInput.js +1 -2
- package/lib/commonjs/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +1 -0
- package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -1
- package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js +1 -2
- package/lib/commonjs/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js.map +1 -1
- package/lib/commonjs/components/MessageInput/components/NativeAttachmentPicker.js +8 -5
- package/lib/commonjs/components/MessageInput/components/NativeAttachmentPicker.js.map +1 -1
- package/lib/commonjs/components/MessageInput/hooks/useAudioController.js +46 -64
- package/lib/commonjs/components/MessageInput/hooks/useAudioController.js.map +1 -1
- package/lib/commonjs/components/MessageList/MessageList.js +67 -60
- package/lib/commonjs/components/MessageList/MessageList.js.map +1 -1
- package/lib/commonjs/components/MessageList/ScrollToBottomButton.js +1 -1
- package/lib/commonjs/components/MessageList/ScrollToBottomButton.js.map +1 -1
- package/lib/commonjs/components/MessageList/hooks/useMessageList.js.map +1 -1
- package/lib/commonjs/components/MessageList/utils/getReadStates.js.map +1 -1
- package/lib/commonjs/components/MessageMenu/MessageActionList.js +35 -0
- package/lib/commonjs/components/MessageMenu/MessageActionList.js.map +1 -0
- package/lib/commonjs/components/MessageMenu/MessageActionListItem.js +60 -0
- package/lib/commonjs/components/MessageMenu/MessageActionListItem.js.map +1 -0
- package/lib/commonjs/components/MessageMenu/MessageMenu.js +70 -0
- package/lib/commonjs/components/MessageMenu/MessageMenu.js.map +1 -0
- package/lib/commonjs/components/MessageMenu/MessageReactionPicker.js +81 -0
- package/lib/commonjs/components/MessageMenu/MessageReactionPicker.js.map +1 -0
- package/lib/commonjs/components/MessageMenu/MessageUserReactions.js +169 -0
- package/lib/commonjs/components/MessageMenu/MessageUserReactions.js.map +1 -0
- package/lib/commonjs/components/{MessageOverlay/OverlayReactionsAvatar.js → MessageMenu/MessageUserReactionsAvatar.js} +5 -6
- package/lib/commonjs/components/MessageMenu/MessageUserReactionsAvatar.js.map +1 -0
- package/lib/commonjs/components/MessageMenu/MessageUserReactionsItem.js +112 -0
- package/lib/commonjs/components/MessageMenu/MessageUserReactionsItem.js.map +1 -0
- package/lib/commonjs/components/MessageMenu/ReactionButton.js +59 -0
- package/lib/commonjs/components/MessageMenu/ReactionButton.js.map +1 -0
- package/lib/commonjs/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.js +65 -41
- package/lib/commonjs/components/MessageMenu/hooks/useFetchReactions.js.map +1 -0
- package/lib/commonjs/components/Poll/CreatePollContent.js +14 -9
- package/lib/commonjs/components/Poll/CreatePollContent.js.map +1 -1
- package/lib/commonjs/components/Poll/Poll.js +2 -8
- package/lib/commonjs/components/Poll/Poll.js.map +1 -1
- package/lib/commonjs/components/Poll/components/Button.js +9 -474
- package/lib/commonjs/components/Poll/components/Button.js.map +1 -1
- package/lib/commonjs/components/Poll/components/CreatePollIcon.js +2 -2
- package/lib/commonjs/components/Poll/components/CreatePollIcon.js.map +1 -1
- package/lib/commonjs/components/Poll/components/CreatePollOptions.js +9 -4
- package/lib/commonjs/components/Poll/components/CreatePollOptions.js.map +1 -1
- package/lib/commonjs/components/Poll/components/PollAnswersList.js +99 -26
- package/lib/commonjs/components/Poll/components/PollAnswersList.js.map +1 -1
- package/lib/commonjs/components/Poll/components/PollButtons.js +291 -0
- package/lib/commonjs/components/Poll/components/PollButtons.js.map +1 -0
- package/lib/commonjs/components/Poll/components/PollInputDialog.js +14 -4
- package/lib/commonjs/components/Poll/components/PollInputDialog.js.map +1 -1
- package/lib/commonjs/components/Poll/components/PollModalHeader.js +7 -1
- package/lib/commonjs/components/Poll/components/PollModalHeader.js.map +1 -1
- package/lib/commonjs/components/Poll/components/PollOption.js +88 -6
- package/lib/commonjs/components/Poll/components/PollOption.js.map +1 -1
- package/lib/commonjs/components/Poll/components/PollResults/PollOptionFullResults.js +2 -2
- package/lib/commonjs/components/Poll/components/PollResults/PollOptionFullResults.js.map +1 -1
- package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js +62 -67
- package/lib/commonjs/components/Poll/components/PollResults/PollResultItem.js.map +1 -1
- package/lib/commonjs/components/Poll/components/PollResults/PollVote.js +89 -0
- package/lib/commonjs/components/Poll/components/PollResults/PollVote.js.map +1 -0
- package/lib/commonjs/components/Poll/components/index.js +11 -0
- package/lib/commonjs/components/Poll/components/index.js.map +1 -1
- package/lib/commonjs/components/ProgressControl/ProgressControl.js +21 -28
- package/lib/commonjs/components/ProgressControl/ProgressControl.js.map +1 -1
- package/lib/commonjs/components/ProgressControl/WaveProgressBar.js +22 -27
- package/lib/commonjs/components/ProgressControl/WaveProgressBar.js.map +1 -1
- package/lib/commonjs/components/Reply/Reply.js +6 -2
- package/lib/commonjs/components/Reply/Reply.js.map +1 -1
- package/lib/commonjs/components/UIComponents/BottomSheetModal.js +158 -0
- package/lib/commonjs/components/UIComponents/BottomSheetModal.js.map +1 -0
- package/lib/commonjs/components/{ImageBackground.js → UIComponents/ImageBackground.js} +1 -1
- package/lib/commonjs/components/UIComponents/ImageBackground.js.map +1 -0
- package/lib/{module/components/Spinner → commonjs/components/UIComponents}/Spinner.js +1 -1
- package/lib/commonjs/components/UIComponents/Spinner.js.map +1 -0
- package/lib/commonjs/components/UIComponents/index.js +37 -0
- package/lib/commonjs/components/UIComponents/index.js.map +1 -0
- package/lib/commonjs/components/docs/data.js.map +1 -1
- package/lib/commonjs/components/index.js +56 -45
- package/lib/commonjs/components/index.js.map +1 -1
- package/lib/commonjs/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js +1 -13
- package/lib/commonjs/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js.map +1 -1
- package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js +1 -11
- package/lib/commonjs/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
- package/lib/commonjs/contexts/channelContext/ChannelContext.js +1 -11
- package/lib/commonjs/contexts/channelContext/ChannelContext.js.map +1 -1
- package/lib/commonjs/contexts/channelsContext/ChannelsContext.js +1 -11
- package/lib/commonjs/contexts/channelsContext/ChannelsContext.js.map +1 -1
- package/lib/commonjs/contexts/channelsStateContext/ChannelsStateContext.js +1 -46
- package/lib/commonjs/contexts/channelsStateContext/ChannelsStateContext.js.map +1 -1
- package/lib/commonjs/contexts/channelsStateContext/useChannelState.js +7 -84
- package/lib/commonjs/contexts/channelsStateContext/useChannelState.js.map +1 -1
- package/lib/commonjs/contexts/chatConfigContext/ChatConfigContext.js +33 -0
- package/lib/commonjs/contexts/chatConfigContext/ChatConfigContext.js.map +1 -0
- package/lib/commonjs/contexts/chatContext/ChatContext.js +1 -11
- package/lib/commonjs/contexts/chatContext/ChatContext.js.map +1 -1
- package/lib/commonjs/contexts/imageGalleryContext/ImageGalleryContext.js +1 -11
- package/lib/commonjs/contexts/imageGalleryContext/ImageGalleryContext.js.map +1 -1
- package/lib/commonjs/contexts/index.js +11 -11
- package/lib/commonjs/contexts/index.js.map +1 -1
- package/lib/commonjs/contexts/keyboardContext/KeyboardContext.js +1 -11
- package/lib/commonjs/contexts/keyboardContext/KeyboardContext.js.map +1 -1
- package/lib/commonjs/contexts/messageContext/MessageContext.js +1 -11
- package/lib/commonjs/contexts/messageContext/MessageContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js +52 -51
- package/lib/commonjs/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +1 -1
- package/lib/commonjs/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
- package/lib/commonjs/contexts/messagesContext/MessagesContext.js +1 -11
- package/lib/commonjs/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/commonjs/contexts/overlayContext/OverlayContext.js +1 -14
- package/lib/commonjs/contexts/overlayContext/OverlayContext.js.map +1 -1
- package/lib/commonjs/contexts/overlayContext/OverlayProvider.js +18 -54
- package/lib/commonjs/contexts/overlayContext/OverlayProvider.js.map +1 -1
- package/lib/commonjs/contexts/paginatedMessageListContext/PaginatedMessageListContext.js +1 -11
- package/lib/commonjs/contexts/paginatedMessageListContext/PaginatedMessageListContext.js.map +1 -1
- package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js +1 -11
- package/lib/commonjs/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
- package/lib/commonjs/contexts/themeContext/utils/theme.js +75 -49
- package/lib/commonjs/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/commonjs/contexts/threadContext/ThreadContext.js +1 -11
- package/lib/commonjs/contexts/threadContext/ThreadContext.js.map +1 -1
- package/lib/commonjs/contexts/translationContext/TranslationContext.js +1 -11
- package/lib/commonjs/contexts/translationContext/TranslationContext.js.map +1 -1
- package/lib/commonjs/contexts/typingContext/TypingContext.js +1 -11
- package/lib/commonjs/contexts/typingContext/TypingContext.js.map +1 -1
- package/lib/commonjs/hooks/useTranslatedMessage.js +1 -4
- package/lib/commonjs/hooks/useTranslatedMessage.js.map +1 -1
- package/lib/commonjs/icons/PinHeader.js +17 -6
- package/lib/commonjs/icons/PinHeader.js.map +1 -1
- package/lib/commonjs/index.js +4 -23
- package/lib/commonjs/index.js.map +1 -1
- package/lib/commonjs/mock-builders/DB/mock.js +159 -88
- package/lib/commonjs/mock-builders/DB/mock.js.map +1 -1
- package/lib/commonjs/native.js +38 -26
- package/lib/commonjs/native.js.map +1 -1
- package/lib/commonjs/store/SqliteClient.js +330 -0
- package/lib/commonjs/store/SqliteClient.js.map +1 -0
- package/lib/commonjs/store/apis/addPendingTask.js +56 -30
- package/lib/commonjs/store/apis/addPendingTask.js.map +1 -1
- package/lib/commonjs/store/apis/deleteChannel.js +36 -17
- package/lib/commonjs/store/apis/deleteChannel.js.map +1 -1
- package/lib/commonjs/store/apis/deleteMember.js +38 -20
- package/lib/commonjs/store/apis/deleteMember.js.map +1 -1
- package/lib/commonjs/store/apis/deleteMessage.js +36 -17
- package/lib/commonjs/store/apis/deleteMessage.js.map +1 -1
- package/lib/commonjs/store/apis/deleteMessagesForChannel.js +36 -17
- package/lib/commonjs/store/apis/deleteMessagesForChannel.js.map +1 -1
- package/lib/commonjs/store/apis/deletePendingTask.js +31 -12
- package/lib/commonjs/store/apis/deletePendingTask.js.map +1 -1
- package/lib/commonjs/store/apis/deleteReaction.js +39 -22
- package/lib/commonjs/store/apis/deleteReaction.js.map +1 -1
- package/lib/commonjs/store/apis/deleteReactions.js +36 -17
- package/lib/commonjs/store/apis/deleteReactions.js.map +1 -1
- package/lib/commonjs/store/apis/getAllChannelIds.js +28 -8
- package/lib/commonjs/store/apis/getAllChannelIds.js.map +1 -1
- package/lib/commonjs/store/apis/getAppSettings.js +31 -11
- package/lib/commonjs/store/apis/getAppSettings.js.map +1 -1
- package/lib/commonjs/store/apis/getChannelMessages.js +77 -52
- package/lib/commonjs/store/apis/getChannelMessages.js.map +1 -1
- package/lib/commonjs/store/apis/getChannels.js +58 -30
- package/lib/commonjs/store/apis/getChannels.js.map +1 -1
- package/lib/commonjs/store/apis/getChannelsForFilterSort.js +58 -26
- package/lib/commonjs/store/apis/getChannelsForFilterSort.js.map +1 -1
- package/lib/commonjs/store/apis/getLastSyncedAt.js +31 -11
- package/lib/commonjs/store/apis/getLastSyncedAt.js.map +1 -1
- package/lib/commonjs/store/apis/getMembers.js +36 -16
- package/lib/commonjs/store/apis/getMembers.js.map +1 -1
- package/lib/commonjs/store/apis/getPendingTasks.js +37 -14
- package/lib/commonjs/store/apis/getPendingTasks.js.map +1 -1
- package/lib/commonjs/store/apis/getReactions.js +2 -2
- package/lib/commonjs/store/apis/getReactions.js.map +1 -1
- package/lib/commonjs/store/apis/getReactionsforFilterSort.js +54 -22
- package/lib/commonjs/store/apis/getReactionsforFilterSort.js.map +1 -1
- package/lib/commonjs/store/apis/getReads.js +36 -16
- package/lib/commonjs/store/apis/getReads.js.map +1 -1
- package/lib/commonjs/store/apis/insertReaction.js +41 -23
- package/lib/commonjs/store/apis/insertReaction.js.map +1 -1
- package/lib/commonjs/store/apis/queries/selectChannelIdsForFilterSort.js +36 -17
- package/lib/commonjs/store/apis/queries/selectChannelIdsForFilterSort.js.map +1 -1
- package/lib/commonjs/store/apis/queries/selectChannels.js +44 -19
- package/lib/commonjs/store/apis/queries/selectChannels.js.map +1 -1
- package/lib/commonjs/store/apis/queries/selectMembersForChannels.js +37 -17
- package/lib/commonjs/store/apis/queries/selectMembersForChannels.js.map +1 -1
- package/lib/commonjs/store/apis/queries/selectMessagesForChannels.js +37 -17
- package/lib/commonjs/store/apis/queries/selectMessagesForChannels.js.map +1 -1
- package/lib/commonjs/store/apis/queries/selectReactionsForMessages.js +37 -17
- package/lib/commonjs/store/apis/queries/selectReactionsForMessages.js.map +1 -1
- package/lib/commonjs/store/apis/queries/selectReadsForChannels.js +37 -17
- package/lib/commonjs/store/apis/queries/selectReadsForChannels.js.map +1 -1
- package/lib/commonjs/store/apis/updateMessage.js +71 -47
- package/lib/commonjs/store/apis/updateMessage.js.map +1 -1
- package/lib/commonjs/store/apis/updatePollMessage.js +68 -59
- package/lib/commonjs/store/apis/updatePollMessage.js.map +1 -1
- package/lib/commonjs/store/apis/updateReaction.js +53 -38
- package/lib/commonjs/store/apis/updateReaction.js.map +1 -1
- package/lib/commonjs/store/apis/upsertAppSettings.js +37 -20
- package/lib/commonjs/store/apis/upsertAppSettings.js.map +1 -1
- package/lib/commonjs/store/apis/upsertChannelData.js +35 -16
- package/lib/commonjs/store/apis/upsertChannelData.js.map +1 -1
- package/lib/commonjs/store/apis/upsertChannelDataFromChannel.js +37 -13
- package/lib/commonjs/store/apis/upsertChannelDataFromChannel.js.map +1 -1
- package/lib/commonjs/store/apis/upsertChannels.js +115 -60
- package/lib/commonjs/store/apis/upsertChannels.js.map +1 -1
- package/lib/commonjs/store/apis/upsertCidsForQuery.js +43 -26
- package/lib/commonjs/store/apis/upsertCidsForQuery.js.map +1 -1
- package/lib/commonjs/store/apis/upsertMembers.js +51 -33
- package/lib/commonjs/store/apis/upsertMembers.js.map +1 -1
- package/lib/commonjs/store/apis/upsertMessages.js +62 -44
- package/lib/commonjs/store/apis/upsertMessages.js.map +1 -1
- package/lib/commonjs/store/apis/upsertReads.js +51 -34
- package/lib/commonjs/store/apis/upsertReads.js.map +1 -1
- package/lib/commonjs/store/apis/upsertUserSyncStatus.js +31 -14
- package/lib/commonjs/store/apis/upsertUserSyncStatus.js.map +1 -1
- package/lib/commonjs/test-utils/BetterSqlite.js +40 -15
- package/lib/commonjs/test-utils/BetterSqlite.js.map +1 -1
- package/lib/commonjs/utils/DBSyncManager.js +238 -152
- package/lib/commonjs/utils/DBSyncManager.js.map +1 -1
- package/lib/commonjs/utils/getResizedImageUrl.js +5 -3
- package/lib/commonjs/utils/getResizedImageUrl.js.map +1 -1
- package/lib/commonjs/utils/utils.js +1 -1
- package/lib/commonjs/utils/utils.js.map +1 -1
- package/lib/commonjs/version.json +1 -1
- package/lib/module/components/Attachment/Attachment.js +1 -1
- package/lib/module/components/Attachment/Attachment.js.map +1 -1
- package/lib/module/components/Attachment/Card.js +6 -6
- package/lib/module/components/Attachment/Card.js.map +1 -1
- package/lib/module/components/Attachment/FileAttachment.js +5 -5
- package/lib/module/components/Attachment/FileAttachment.js.map +1 -1
- package/lib/module/components/Attachment/FileAttachmentGroup.js +1 -1
- package/lib/module/components/Attachment/FileAttachmentGroup.js.map +1 -1
- package/lib/module/components/Attachment/Gallery.js +32 -23
- package/lib/module/components/Attachment/Gallery.js.map +1 -1
- package/lib/module/components/Attachment/Giphy.js +8 -8
- package/lib/module/components/Attachment/Giphy.js.map +1 -1
- package/lib/module/components/Attachment/utils/buildGallery/buildGallery.js +7 -0
- package/lib/module/components/Attachment/utils/buildGallery/buildGallery.js.map +1 -1
- package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js +3 -1
- package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.js.map +1 -1
- package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js +3 -0
- package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.js.map +1 -1
- package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js +4 -0
- package/lib/module/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.js.map +1 -1
- package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js +2 -0
- package/lib/module/components/Attachment/utils/buildGallery/buildThumbnail.js.map +1 -1
- package/lib/module/components/Attachment/utils/buildGallery/buildThumbnailGrid.js +2 -0
- package/lib/module/components/Attachment/utils/buildGallery/buildThumbnailGrid.js.map +1 -1
- package/lib/module/components/AttachmentPicker/AttachmentPicker.js +2 -2
- package/lib/module/components/AttachmentPicker/AttachmentPicker.js.map +1 -1
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js +40 -136
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerItem.js.map +1 -1
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js +9 -6
- package/lib/module/components/AttachmentPicker/components/AttachmentPickerSelectionBar.js.map +1 -1
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js +1 -2
- package/lib/module/components/AutoCompleteInput/AutoCompleteSuggestionList.js.map +1 -1
- package/lib/module/components/Avatar/Avatar.js +4 -0
- package/lib/module/components/Avatar/Avatar.js.map +1 -1
- package/lib/module/components/Avatar/GroupAvatar.js +4 -0
- package/lib/module/components/Avatar/GroupAvatar.js.map +1 -1
- package/lib/module/components/Channel/Channel.js +576 -1262
- package/lib/module/components/Channel/Channel.js.map +1 -1
- package/lib/module/components/Channel/hooks/useChannelDataState.js +174 -0
- package/lib/module/components/Channel/hooks/useChannelDataState.js.map +1 -0
- package/lib/module/components/Channel/hooks/useCreateChannelContext.js +0 -8
- package/lib/module/components/Channel/hooks/useCreateChannelContext.js.map +1 -1
- package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js +2 -2
- package/lib/module/components/Channel/hooks/useCreateInputMessageInputContext.js.map +1 -1
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js +26 -10
- package/lib/module/components/Channel/hooks/useCreateMessagesContext.js.map +1 -1
- package/lib/module/components/Channel/hooks/useCreatePaginatedMessageListContext.js +3 -3
- package/lib/module/components/Channel/hooks/useCreatePaginatedMessageListContext.js.map +1 -1
- package/lib/module/components/Channel/hooks/useMessageListPagination.js +324 -0
- package/lib/module/components/Channel/hooks/useMessageListPagination.js.map +1 -0
- package/lib/module/components/ChannelList/ChannelList.js +0 -2
- package/lib/module/components/ChannelList/ChannelList.js.map +1 -1
- package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js +1 -1
- package/lib/module/components/ChannelList/ChannelListFooterLoadingIndicator.js.map +1 -1
- package/lib/module/components/ChannelList/Skeleton.js +7 -3
- package/lib/module/components/ChannelList/Skeleton.js.map +1 -1
- package/lib/module/components/ChannelList/hooks/listeners/useNewMessageNotification.js +8 -18
- package/lib/module/components/ChannelList/hooks/listeners/useNewMessageNotification.js.map +1 -1
- package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js +85 -46
- package/lib/module/components/ChannelList/hooks/usePaginatedChannels.js.map +1 -1
- package/lib/module/components/Chat/Chat.js +31 -16
- package/lib/module/components/Chat/Chat.js.map +1 -1
- package/lib/module/components/Chat/hooks/handleEventToSyncDB.js +312 -173
- package/lib/module/components/Chat/hooks/handleEventToSyncDB.js.map +1 -1
- package/lib/module/components/Chat/hooks/useAppSettings.js +31 -18
- package/lib/module/components/Chat/hooks/useAppSettings.js.map +1 -1
- package/lib/module/components/Chat/hooks/useCreateChatContext.js +0 -2
- package/lib/module/components/Chat/hooks/useCreateChatContext.js.map +1 -1
- package/lib/module/components/Chat/hooks/useIsOnline.js +16 -13
- package/lib/module/components/Chat/hooks/useIsOnline.js.map +1 -1
- package/lib/module/components/ImageGallery/ImageGallery.js +57 -96
- package/lib/module/components/ImageGallery/ImageGallery.js.map +1 -1
- package/lib/module/components/ImageGallery/components/AnimatedGalleryImage.js +14 -35
- package/lib/module/components/ImageGallery/components/AnimatedGalleryImage.js.map +1 -1
- package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js +17 -35
- package/lib/module/components/ImageGallery/components/AnimatedGalleryVideo.js.map +1 -1
- package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js +72 -64
- package/lib/module/components/ImageGallery/components/ImageGalleryFooter.js.map +1 -1
- package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js +38 -39
- package/lib/module/components/ImageGallery/components/ImageGalleryHeader.js.map +1 -1
- package/lib/module/components/ImageGallery/components/ImageGalleryOverlay.js.map +1 -1
- package/lib/module/components/ImageGallery/hooks/useAnimatedGalleryStyle.js +54 -0
- package/lib/module/components/ImageGallery/hooks/useAnimatedGalleryStyle.js.map +1 -0
- package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js +230 -225
- package/lib/module/components/ImageGallery/hooks/useImageGalleryGestures.js.map +1 -1
- package/lib/module/components/Indicators/LoadingIndicator.js +1 -1
- package/lib/module/components/Indicators/LoadingIndicator.js.map +1 -1
- package/lib/module/components/Message/Message.js +136 -192
- package/lib/module/components/Message/Message.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageAvatar.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageBounce.js +23 -6
- package/lib/module/components/Message/MessageSimple/MessageBounce.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageContent.js +40 -145
- package/lib/module/components/Message/MessageSimple/MessageContent.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageDeleted.js +1 -1
- package/lib/module/components/Message/MessageSimple/MessageDeleted.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageFooter.js +0 -1
- package/lib/module/components/Message/MessageSimple/MessageFooter.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js +20 -34
- package/lib/module/components/Message/MessageSimple/MessagePinnedHeader.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageSimple.js +182 -44
- package/lib/module/components/Message/MessageSimple/MessageSimple.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/MessageTextContainer.js +1 -1
- package/lib/module/components/Message/MessageSimple/MessageTextContainer.js.map +1 -1
- package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListBottom.js +234 -0
- package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListBottom.js.map +1 -0
- package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListTop.js +195 -0
- package/lib/module/components/Message/MessageSimple/ReactionList/ReactionListTop.js.map +1 -0
- package/lib/module/components/Message/hooks/useCreateMessageContext.js +4 -16
- package/lib/module/components/Message/hooks/useCreateMessageContext.js.map +1 -1
- package/lib/module/components/Message/hooks/useMessageActions.js +36 -72
- package/lib/module/components/Message/hooks/useMessageActions.js.map +1 -1
- package/lib/module/components/Message/hooks/useMessageData.js +38 -0
- package/lib/module/components/Message/hooks/useMessageData.js.map +1 -0
- package/lib/module/components/Message/hooks/useProcessReactions.js +3 -3
- package/lib/module/components/Message/hooks/useProcessReactions.js.map +1 -1
- package/lib/module/components/Message/utils/messageActions.js +4 -6
- package/lib/module/components/Message/utils/messageActions.js.map +1 -1
- package/lib/module/components/MessageInput/FileUploadPreview.js +1 -1
- package/lib/module/components/MessageInput/FileUploadPreview.js.map +1 -1
- package/lib/module/components/MessageInput/MessageInput.js +1 -2
- package/lib/module/components/MessageInput/MessageInput.js.map +1 -1
- package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js +1 -0
- package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingButton.js.map +1 -1
- package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js +1 -2
- package/lib/module/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.js.map +1 -1
- package/lib/module/components/MessageInput/components/NativeAttachmentPicker.js +8 -5
- package/lib/module/components/MessageInput/components/NativeAttachmentPicker.js.map +1 -1
- package/lib/module/components/MessageInput/hooks/useAudioController.js +46 -64
- package/lib/module/components/MessageInput/hooks/useAudioController.js.map +1 -1
- package/lib/module/components/MessageList/MessageList.js +67 -60
- package/lib/module/components/MessageList/MessageList.js.map +1 -1
- package/lib/module/components/MessageList/ScrollToBottomButton.js +1 -1
- package/lib/module/components/MessageList/ScrollToBottomButton.js.map +1 -1
- package/lib/module/components/MessageList/hooks/useMessageList.js.map +1 -1
- package/lib/module/components/MessageList/utils/getReadStates.js.map +1 -1
- package/lib/module/components/MessageMenu/MessageActionList.js +35 -0
- package/lib/module/components/MessageMenu/MessageActionList.js.map +1 -0
- package/lib/module/components/MessageMenu/MessageActionListItem.js +60 -0
- package/lib/module/components/MessageMenu/MessageActionListItem.js.map +1 -0
- package/lib/module/components/MessageMenu/MessageMenu.js +70 -0
- package/lib/module/components/MessageMenu/MessageMenu.js.map +1 -0
- package/lib/module/components/MessageMenu/MessageReactionPicker.js +81 -0
- package/lib/module/components/MessageMenu/MessageReactionPicker.js.map +1 -0
- package/lib/module/components/MessageMenu/MessageUserReactions.js +169 -0
- package/lib/module/components/MessageMenu/MessageUserReactions.js.map +1 -0
- package/lib/module/components/{MessageOverlay/OverlayReactionsAvatar.js → MessageMenu/MessageUserReactionsAvatar.js} +5 -6
- package/lib/module/components/MessageMenu/MessageUserReactionsAvatar.js.map +1 -0
- package/lib/module/components/MessageMenu/MessageUserReactionsItem.js +112 -0
- package/lib/module/components/MessageMenu/MessageUserReactionsItem.js.map +1 -0
- package/lib/module/components/MessageMenu/ReactionButton.js +59 -0
- package/lib/module/components/MessageMenu/ReactionButton.js.map +1 -0
- package/lib/module/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.js +65 -41
- package/lib/module/components/MessageMenu/hooks/useFetchReactions.js.map +1 -0
- package/lib/module/components/Poll/CreatePollContent.js +14 -9
- package/lib/module/components/Poll/CreatePollContent.js.map +1 -1
- package/lib/module/components/Poll/Poll.js +2 -8
- package/lib/module/components/Poll/Poll.js.map +1 -1
- package/lib/module/components/Poll/components/Button.js +9 -474
- package/lib/module/components/Poll/components/Button.js.map +1 -1
- package/lib/module/components/Poll/components/CreatePollIcon.js +2 -2
- package/lib/module/components/Poll/components/CreatePollIcon.js.map +1 -1
- package/lib/module/components/Poll/components/CreatePollOptions.js +9 -4
- package/lib/module/components/Poll/components/CreatePollOptions.js.map +1 -1
- package/lib/module/components/Poll/components/PollAnswersList.js +99 -26
- package/lib/module/components/Poll/components/PollAnswersList.js.map +1 -1
- package/lib/module/components/Poll/components/PollButtons.js +291 -0
- package/lib/module/components/Poll/components/PollButtons.js.map +1 -0
- package/lib/module/components/Poll/components/PollInputDialog.js +14 -4
- package/lib/module/components/Poll/components/PollInputDialog.js.map +1 -1
- package/lib/module/components/Poll/components/PollModalHeader.js +7 -1
- package/lib/module/components/Poll/components/PollModalHeader.js.map +1 -1
- package/lib/module/components/Poll/components/PollOption.js +88 -6
- package/lib/module/components/Poll/components/PollOption.js.map +1 -1
- package/lib/module/components/Poll/components/PollResults/PollOptionFullResults.js +2 -2
- package/lib/module/components/Poll/components/PollResults/PollOptionFullResults.js.map +1 -1
- package/lib/module/components/Poll/components/PollResults/PollResultItem.js +62 -67
- package/lib/module/components/Poll/components/PollResults/PollResultItem.js.map +1 -1
- package/lib/module/components/Poll/components/PollResults/PollVote.js +89 -0
- package/lib/module/components/Poll/components/PollResults/PollVote.js.map +1 -0
- package/lib/module/components/Poll/components/index.js +11 -0
- package/lib/module/components/Poll/components/index.js.map +1 -1
- package/lib/module/components/ProgressControl/ProgressControl.js +21 -28
- package/lib/module/components/ProgressControl/ProgressControl.js.map +1 -1
- package/lib/module/components/ProgressControl/WaveProgressBar.js +22 -27
- package/lib/module/components/ProgressControl/WaveProgressBar.js.map +1 -1
- package/lib/module/components/Reply/Reply.js +6 -2
- package/lib/module/components/Reply/Reply.js.map +1 -1
- package/lib/module/components/UIComponents/BottomSheetModal.js +158 -0
- package/lib/module/components/UIComponents/BottomSheetModal.js.map +1 -0
- package/lib/module/components/{ImageBackground.js → UIComponents/ImageBackground.js} +1 -1
- package/lib/module/components/UIComponents/ImageBackground.js.map +1 -0
- package/lib/{commonjs/components/Spinner → module/components/UIComponents}/Spinner.js +1 -1
- package/lib/module/components/UIComponents/Spinner.js.map +1 -0
- package/lib/module/components/UIComponents/index.js +37 -0
- package/lib/module/components/UIComponents/index.js.map +1 -0
- package/lib/module/components/docs/data.js.map +1 -1
- package/lib/module/components/index.js +56 -45
- package/lib/module/components/index.js.map +1 -1
- package/lib/module/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js +1 -13
- package/lib/module/contexts/activeChannelsRefContext/ActiveChannelsRefContext.js.map +1 -1
- package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js +1 -11
- package/lib/module/contexts/attachmentPickerContext/AttachmentPickerContext.js.map +1 -1
- package/lib/module/contexts/channelContext/ChannelContext.js +1 -11
- package/lib/module/contexts/channelContext/ChannelContext.js.map +1 -1
- package/lib/module/contexts/channelsContext/ChannelsContext.js +1 -11
- package/lib/module/contexts/channelsContext/ChannelsContext.js.map +1 -1
- package/lib/module/contexts/channelsStateContext/ChannelsStateContext.js +1 -46
- package/lib/module/contexts/channelsStateContext/ChannelsStateContext.js.map +1 -1
- package/lib/module/contexts/channelsStateContext/useChannelState.js +7 -84
- package/lib/module/contexts/channelsStateContext/useChannelState.js.map +1 -1
- package/lib/module/contexts/chatConfigContext/ChatConfigContext.js +33 -0
- package/lib/module/contexts/chatConfigContext/ChatConfigContext.js.map +1 -0
- package/lib/module/contexts/chatContext/ChatContext.js +1 -11
- package/lib/module/contexts/chatContext/ChatContext.js.map +1 -1
- package/lib/module/contexts/imageGalleryContext/ImageGalleryContext.js +1 -11
- package/lib/module/contexts/imageGalleryContext/ImageGalleryContext.js.map +1 -1
- package/lib/module/contexts/index.js +11 -11
- package/lib/module/contexts/index.js.map +1 -1
- package/lib/module/contexts/keyboardContext/KeyboardContext.js +1 -11
- package/lib/module/contexts/keyboardContext/KeyboardContext.js.map +1 -1
- package/lib/module/contexts/messageContext/MessageContext.js +1 -11
- package/lib/module/contexts/messageContext/MessageContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/MessageInputContext.js +52 -51
- package/lib/module/contexts/messageInputContext/MessageInputContext.js.map +1 -1
- package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js +1 -1
- package/lib/module/contexts/messageInputContext/hooks/useCreateMessageInputContext.js.map +1 -1
- package/lib/module/contexts/messagesContext/MessagesContext.js +1 -11
- package/lib/module/contexts/messagesContext/MessagesContext.js.map +1 -1
- package/lib/module/contexts/overlayContext/OverlayContext.js +1 -14
- package/lib/module/contexts/overlayContext/OverlayContext.js.map +1 -1
- package/lib/module/contexts/overlayContext/OverlayProvider.js +18 -54
- package/lib/module/contexts/overlayContext/OverlayProvider.js.map +1 -1
- package/lib/module/contexts/paginatedMessageListContext/PaginatedMessageListContext.js +1 -11
- package/lib/module/contexts/paginatedMessageListContext/PaginatedMessageListContext.js.map +1 -1
- package/lib/module/contexts/suggestionsContext/SuggestionsContext.js +1 -11
- package/lib/module/contexts/suggestionsContext/SuggestionsContext.js.map +1 -1
- package/lib/module/contexts/themeContext/utils/theme.js +75 -49
- package/lib/module/contexts/themeContext/utils/theme.js.map +1 -1
- package/lib/module/contexts/threadContext/ThreadContext.js +1 -11
- package/lib/module/contexts/threadContext/ThreadContext.js.map +1 -1
- package/lib/module/contexts/translationContext/TranslationContext.js +1 -11
- package/lib/module/contexts/translationContext/TranslationContext.js.map +1 -1
- package/lib/module/contexts/typingContext/TypingContext.js +1 -11
- package/lib/module/contexts/typingContext/TypingContext.js.map +1 -1
- package/lib/module/hooks/useTranslatedMessage.js +1 -4
- package/lib/module/hooks/useTranslatedMessage.js.map +1 -1
- package/lib/module/icons/PinHeader.js +17 -6
- package/lib/module/icons/PinHeader.js.map +1 -1
- package/lib/module/index.js +4 -23
- package/lib/module/index.js.map +1 -1
- package/lib/module/mock-builders/DB/mock.js +159 -88
- package/lib/module/mock-builders/DB/mock.js.map +1 -1
- package/lib/module/native.js +38 -26
- package/lib/module/native.js.map +1 -1
- package/lib/module/store/SqliteClient.js +330 -0
- package/lib/module/store/SqliteClient.js.map +1 -0
- package/lib/module/store/apis/addPendingTask.js +56 -30
- package/lib/module/store/apis/addPendingTask.js.map +1 -1
- package/lib/module/store/apis/deleteChannel.js +36 -17
- package/lib/module/store/apis/deleteChannel.js.map +1 -1
- package/lib/module/store/apis/deleteMember.js +38 -20
- package/lib/module/store/apis/deleteMember.js.map +1 -1
- package/lib/module/store/apis/deleteMessage.js +36 -17
- package/lib/module/store/apis/deleteMessage.js.map +1 -1
- package/lib/module/store/apis/deleteMessagesForChannel.js +36 -17
- package/lib/module/store/apis/deleteMessagesForChannel.js.map +1 -1
- package/lib/module/store/apis/deletePendingTask.js +31 -12
- package/lib/module/store/apis/deletePendingTask.js.map +1 -1
- package/lib/module/store/apis/deleteReaction.js +39 -22
- package/lib/module/store/apis/deleteReaction.js.map +1 -1
- package/lib/module/store/apis/deleteReactions.js +36 -17
- package/lib/module/store/apis/deleteReactions.js.map +1 -1
- package/lib/module/store/apis/getAllChannelIds.js +28 -8
- package/lib/module/store/apis/getAllChannelIds.js.map +1 -1
- package/lib/module/store/apis/getAppSettings.js +31 -11
- package/lib/module/store/apis/getAppSettings.js.map +1 -1
- package/lib/module/store/apis/getChannelMessages.js +77 -52
- package/lib/module/store/apis/getChannelMessages.js.map +1 -1
- package/lib/module/store/apis/getChannels.js +58 -30
- package/lib/module/store/apis/getChannels.js.map +1 -1
- package/lib/module/store/apis/getChannelsForFilterSort.js +58 -26
- package/lib/module/store/apis/getChannelsForFilterSort.js.map +1 -1
- package/lib/module/store/apis/getLastSyncedAt.js +31 -11
- package/lib/module/store/apis/getLastSyncedAt.js.map +1 -1
- package/lib/module/store/apis/getMembers.js +36 -16
- package/lib/module/store/apis/getMembers.js.map +1 -1
- package/lib/module/store/apis/getPendingTasks.js +37 -14
- package/lib/module/store/apis/getPendingTasks.js.map +1 -1
- package/lib/module/store/apis/getReactions.js +2 -2
- package/lib/module/store/apis/getReactions.js.map +1 -1
- package/lib/module/store/apis/getReactionsforFilterSort.js +54 -22
- package/lib/module/store/apis/getReactionsforFilterSort.js.map +1 -1
- package/lib/module/store/apis/getReads.js +36 -16
- package/lib/module/store/apis/getReads.js.map +1 -1
- package/lib/module/store/apis/insertReaction.js +41 -23
- package/lib/module/store/apis/insertReaction.js.map +1 -1
- package/lib/module/store/apis/queries/selectChannelIdsForFilterSort.js +36 -17
- package/lib/module/store/apis/queries/selectChannelIdsForFilterSort.js.map +1 -1
- package/lib/module/store/apis/queries/selectChannels.js +44 -19
- package/lib/module/store/apis/queries/selectChannels.js.map +1 -1
- package/lib/module/store/apis/queries/selectMembersForChannels.js +37 -17
- package/lib/module/store/apis/queries/selectMembersForChannels.js.map +1 -1
- package/lib/module/store/apis/queries/selectMessagesForChannels.js +37 -17
- package/lib/module/store/apis/queries/selectMessagesForChannels.js.map +1 -1
- package/lib/module/store/apis/queries/selectReactionsForMessages.js +37 -17
- package/lib/module/store/apis/queries/selectReactionsForMessages.js.map +1 -1
- package/lib/module/store/apis/queries/selectReadsForChannels.js +37 -17
- package/lib/module/store/apis/queries/selectReadsForChannels.js.map +1 -1
- package/lib/module/store/apis/updateMessage.js +71 -47
- package/lib/module/store/apis/updateMessage.js.map +1 -1
- package/lib/module/store/apis/updatePollMessage.js +68 -59
- package/lib/module/store/apis/updatePollMessage.js.map +1 -1
- package/lib/module/store/apis/updateReaction.js +53 -38
- package/lib/module/store/apis/updateReaction.js.map +1 -1
- package/lib/module/store/apis/upsertAppSettings.js +37 -20
- package/lib/module/store/apis/upsertAppSettings.js.map +1 -1
- package/lib/module/store/apis/upsertChannelData.js +35 -16
- package/lib/module/store/apis/upsertChannelData.js.map +1 -1
- package/lib/module/store/apis/upsertChannelDataFromChannel.js +37 -13
- package/lib/module/store/apis/upsertChannelDataFromChannel.js.map +1 -1
- package/lib/module/store/apis/upsertChannels.js +115 -60
- package/lib/module/store/apis/upsertChannels.js.map +1 -1
- package/lib/module/store/apis/upsertCidsForQuery.js +43 -26
- package/lib/module/store/apis/upsertCidsForQuery.js.map +1 -1
- package/lib/module/store/apis/upsertMembers.js +51 -33
- package/lib/module/store/apis/upsertMembers.js.map +1 -1
- package/lib/module/store/apis/upsertMessages.js +62 -44
- package/lib/module/store/apis/upsertMessages.js.map +1 -1
- package/lib/module/store/apis/upsertReads.js +51 -34
- package/lib/module/store/apis/upsertReads.js.map +1 -1
- package/lib/module/store/apis/upsertUserSyncStatus.js +31 -14
- package/lib/module/store/apis/upsertUserSyncStatus.js.map +1 -1
- package/lib/module/test-utils/BetterSqlite.js +40 -15
- package/lib/module/test-utils/BetterSqlite.js.map +1 -1
- package/lib/module/utils/DBSyncManager.js +238 -152
- package/lib/module/utils/DBSyncManager.js.map +1 -1
- package/lib/module/utils/getResizedImageUrl.js +5 -3
- package/lib/module/utils/getResizedImageUrl.js.map +1 -1
- package/lib/module/utils/utils.js +1 -1
- package/lib/module/utils/utils.js.map +1 -1
- package/lib/module/version.json +1 -1
- package/lib/typescript/components/Attachment/Card.d.ts +2 -2
- package/lib/typescript/components/Attachment/Card.d.ts.map +1 -1
- package/lib/typescript/components/Attachment/FileAttachment.d.ts +1 -1
- package/lib/typescript/components/Attachment/FileAttachment.d.ts.map +1 -1
- package/lib/typescript/components/Attachment/Gallery.d.ts +1 -1
- package/lib/typescript/components/Attachment/Gallery.d.ts.map +1 -1
- package/lib/typescript/components/Attachment/Giphy.d.ts +1 -1
- package/lib/typescript/components/Attachment/utils/buildGallery/buildGallery.d.ts +2 -1
- package/lib/typescript/components/Attachment/utils/buildGallery/buildGallery.d.ts.map +1 -1
- package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.d.ts +2 -1
- package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.d.ts.map +1 -1
- package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.d.ts +2 -1
- package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.d.ts.map +1 -1
- package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.d.ts +2 -1
- package/lib/typescript/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.d.ts.map +1 -1
- package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnail.d.ts +4 -2
- package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnail.d.ts.map +1 -1
- package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnailGrid.d.ts +2 -1
- package/lib/typescript/components/Attachment/utils/buildGallery/buildThumbnailGrid.d.ts.map +1 -1
- package/lib/typescript/components/AttachmentPicker/AttachmentPicker.d.ts.map +1 -1
- package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.d.ts +2 -2
- package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.d.ts.map +1 -1
- package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerItem.d.ts.map +1 -1
- package/lib/typescript/components/AttachmentPicker/components/AttachmentPickerSelectionBar.d.ts.map +1 -1
- package/lib/typescript/components/AutoCompleteInput/AutoCompleteSuggestionList.d.ts.map +1 -1
- package/lib/typescript/components/Avatar/Avatar.d.ts.map +1 -1
- package/lib/typescript/components/Avatar/GroupAvatar.d.ts.map +1 -1
- package/lib/typescript/components/Channel/Channel.d.ts +5 -5
- package/lib/typescript/components/Channel/Channel.d.ts.map +1 -1
- package/lib/typescript/components/Channel/hooks/useChannelDataState.d.ts +75 -0
- package/lib/typescript/components/Channel/hooks/useChannelDataState.d.ts.map +1 -0
- package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateChannelContext.d.ts.map +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateInputMessageInputContext.d.ts.map +1 -1
- package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts +22 -14
- package/lib/typescript/components/Channel/hooks/useCreateMessagesContext.d.ts.map +1 -1
- package/lib/typescript/components/Channel/hooks/useCreatePaginatedMessageListContext.d.ts +1 -1
- package/lib/typescript/components/Channel/hooks/useCreatePaginatedMessageListContext.d.ts.map +1 -1
- package/lib/typescript/components/Channel/hooks/useMessageListPagination.d.ts +28 -0
- package/lib/typescript/components/Channel/hooks/useMessageListPagination.d.ts.map +1 -0
- package/lib/typescript/components/ChannelList/ChannelList.d.ts +0 -12
- package/lib/typescript/components/ChannelList/ChannelList.d.ts.map +1 -1
- package/lib/typescript/components/ChannelList/Skeleton.d.ts.map +1 -1
- package/lib/typescript/components/ChannelList/hooks/listeners/useNewMessageNotification.d.ts +1 -2
- package/lib/typescript/components/ChannelList/hooks/listeners/useNewMessageNotification.d.ts.map +1 -1
- package/lib/typescript/components/ChannelList/hooks/usePaginatedChannels.d.ts.map +1 -1
- package/lib/typescript/components/Chat/Chat.d.ts +1 -1
- package/lib/typescript/components/Chat/Chat.d.ts.map +1 -1
- package/lib/typescript/components/Chat/hooks/handleEventToSyncDB.d.ts +1 -1
- package/lib/typescript/components/Chat/hooks/handleEventToSyncDB.d.ts.map +1 -1
- package/lib/typescript/components/Chat/hooks/useAppSettings.d.ts.map +1 -1
- package/lib/typescript/components/Chat/hooks/useCreateChatContext.d.ts +1 -1
- package/lib/typescript/components/Chat/hooks/useCreateChatContext.d.ts.map +1 -1
- package/lib/typescript/components/Chat/hooks/useIsOnline.d.ts.map +1 -1
- package/lib/typescript/components/ImageGallery/ImageGallery.d.ts +2 -2
- package/lib/typescript/components/ImageGallery/ImageGallery.d.ts.map +1 -1
- package/lib/typescript/components/ImageGallery/components/AnimatedGalleryImage.d.ts +5 -5
- package/lib/typescript/components/ImageGallery/components/AnimatedGalleryImage.d.ts.map +1 -1
- package/lib/typescript/components/ImageGallery/components/AnimatedGalleryVideo.d.ts +5 -5
- package/lib/typescript/components/ImageGallery/components/AnimatedGalleryVideo.d.ts.map +1 -1
- package/lib/typescript/components/ImageGallery/components/ImageGalleryFooter.d.ts +3 -3
- package/lib/typescript/components/ImageGallery/components/ImageGalleryFooter.d.ts.map +1 -1
- package/lib/typescript/components/ImageGallery/components/ImageGalleryHeader.d.ts +3 -3
- package/lib/typescript/components/ImageGallery/components/ImageGalleryHeader.d.ts.map +1 -1
- package/lib/typescript/components/ImageGallery/components/ImageGalleryOverlay.d.ts +2 -2
- package/lib/typescript/components/ImageGallery/components/ImageGalleryOverlay.d.ts.map +1 -1
- package/lib/typescript/components/ImageGallery/hooks/useAnimatedGalleryStyle.d.ts +37 -0
- package/lib/typescript/components/ImageGallery/hooks/useAnimatedGalleryStyle.d.ts.map +1 -0
- package/lib/typescript/components/ImageGallery/hooks/useImageGalleryGestures.d.ts +4 -5
- package/lib/typescript/components/ImageGallery/hooks/useImageGalleryGestures.d.ts.map +1 -1
- package/lib/typescript/components/Message/Message.d.ts +4 -40
- package/lib/typescript/components/Message/Message.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageSimple/MessageAvatar.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts +11 -5
- package/lib/typescript/components/Message/MessageSimple/MessageContent.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageSimple/MessagePinnedHeader.d.ts +2 -6
- package/lib/typescript/components/Message/MessageSimple/MessagePinnedHeader.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts +1 -1
- package/lib/typescript/components/Message/MessageSimple/MessageSimple.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageSimple/MessageTextContainer.d.ts +1 -2
- package/lib/typescript/components/Message/MessageSimple/MessageTextContainer.d.ts.map +1 -1
- package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListBottom.d.ts +12 -0
- package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListBottom.d.ts.map +1 -0
- package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListTop.d.ts +20 -0
- package/lib/typescript/components/Message/MessageSimple/ReactionList/ReactionListTop.d.ts.map +1 -0
- package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts +1 -1
- package/lib/typescript/components/Message/hooks/useCreateMessageContext.d.ts.map +1 -1
- package/lib/typescript/components/Message/hooks/useMessageActions.d.ts +5 -6
- package/lib/typescript/components/Message/hooks/useMessageActions.d.ts.map +1 -1
- package/lib/typescript/components/Message/hooks/useMessageData.d.ts +12 -0
- package/lib/typescript/components/Message/hooks/useMessageData.d.ts.map +1 -0
- package/lib/typescript/components/Message/hooks/useProcessReactions.d.ts +11 -3
- package/lib/typescript/components/Message/hooks/useProcessReactions.d.ts.map +1 -1
- package/lib/typescript/components/Message/utils/messageActions.d.ts +6 -14
- package/lib/typescript/components/Message/utils/messageActions.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/MessageInput.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/components/AudioRecorder/AudioRecordingButton.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/components/NativeAttachmentPicker.d.ts.map +1 -1
- package/lib/typescript/components/MessageInput/hooks/useAudioController.d.ts.map +1 -1
- package/lib/typescript/components/MessageList/MessageList.d.ts +1 -1
- package/lib/typescript/components/MessageList/MessageList.d.ts.map +1 -1
- package/lib/typescript/components/MessageList/hooks/useMessageList.d.ts.map +1 -1
- package/lib/typescript/components/MessageList/utils/getReadStates.d.ts +1 -1
- package/lib/typescript/components/MessageList/utils/getReadStates.d.ts.map +1 -1
- package/lib/typescript/components/MessageMenu/MessageActionList.d.ts +16 -0
- package/lib/typescript/components/MessageMenu/MessageActionList.d.ts.map +1 -0
- package/lib/typescript/components/{MessageOverlay → MessageMenu}/MessageActionListItem.d.ts +2 -8
- package/lib/typescript/components/MessageMenu/MessageActionListItem.d.ts.map +1 -0
- package/lib/typescript/components/MessageMenu/MessageMenu.d.ts +32 -0
- package/lib/typescript/components/MessageMenu/MessageMenu.d.ts.map +1 -0
- package/lib/typescript/components/MessageMenu/MessageReactionPicker.d.ts +30 -0
- package/lib/typescript/components/MessageMenu/MessageReactionPicker.d.ts.map +1 -0
- package/lib/typescript/components/MessageMenu/MessageUserReactions.d.ts +21 -0
- package/lib/typescript/components/MessageMenu/MessageUserReactions.d.ts.map +1 -0
- package/lib/typescript/components/MessageMenu/MessageUserReactionsAvatar.d.ts +11 -0
- package/lib/typescript/components/MessageMenu/MessageUserReactionsAvatar.d.ts.map +1 -0
- package/lib/typescript/components/MessageMenu/MessageUserReactionsItem.d.ts +16 -0
- package/lib/typescript/components/MessageMenu/MessageUserReactionsItem.d.ts.map +1 -0
- package/lib/typescript/components/MessageMenu/ReactionButton.d.ts +25 -0
- package/lib/typescript/components/MessageMenu/ReactionButton.d.ts.map +1 -0
- package/lib/typescript/components/MessageMenu/hooks/useFetchReactions.d.ts.map +1 -0
- package/lib/typescript/components/Poll/Poll.d.ts +0 -1
- package/lib/typescript/components/Poll/Poll.d.ts.map +1 -1
- package/lib/typescript/components/Poll/components/Button.d.ts +0 -17
- package/lib/typescript/components/Poll/components/Button.d.ts.map +1 -1
- package/lib/typescript/components/Poll/components/CreatePollOptions.d.ts.map +1 -1
- package/lib/typescript/components/Poll/components/PollAnswersList.d.ts +2 -0
- package/lib/typescript/components/Poll/components/PollAnswersList.d.ts.map +1 -1
- package/lib/typescript/components/Poll/components/PollButtons.d.ts +10 -0
- package/lib/typescript/components/Poll/components/PollButtons.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/PollInputDialog.d.ts.map +1 -1
- package/lib/typescript/components/Poll/components/PollOption.d.ts +2 -0
- package/lib/typescript/components/Poll/components/PollOption.d.ts.map +1 -1
- package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts +11 -4
- package/lib/typescript/components/Poll/components/PollResults/PollResultItem.d.ts.map +1 -1
- package/lib/typescript/components/Poll/components/PollResults/PollVote.d.ts +6 -0
- package/lib/typescript/components/Poll/components/PollResults/PollVote.d.ts.map +1 -0
- package/lib/typescript/components/Poll/components/index.d.ts +1 -0
- package/lib/typescript/components/Poll/components/index.d.ts.map +1 -1
- package/lib/typescript/components/ProgressControl/ProgressControl.d.ts.map +1 -1
- package/lib/typescript/components/ProgressControl/WaveProgressBar.d.ts.map +1 -1
- package/lib/typescript/components/Reply/Reply.d.ts.map +1 -1
- package/lib/typescript/components/UIComponents/BottomSheetModal.d.ts +21 -0
- package/lib/typescript/components/UIComponents/BottomSheetModal.d.ts.map +1 -0
- package/lib/typescript/components/UIComponents/ImageBackground.d.ts.map +1 -0
- package/lib/typescript/components/UIComponents/Spinner.d.ts.map +1 -0
- package/lib/typescript/components/UIComponents/index.d.ts +4 -0
- package/lib/typescript/components/UIComponents/index.d.ts.map +1 -0
- package/lib/typescript/components/index.d.ts +11 -10
- package/lib/typescript/components/index.d.ts.map +1 -1
- package/lib/typescript/contexts/activeChannelsRefContext/ActiveChannelsRefContext.d.ts +0 -11
- package/lib/typescript/contexts/activeChannelsRefContext/ActiveChannelsRefContext.d.ts.map +1 -1
- package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts +1 -11
- package/lib/typescript/contexts/attachmentPickerContext/AttachmentPickerContext.d.ts.map +1 -1
- package/lib/typescript/contexts/channelContext/ChannelContext.d.ts +28 -62
- package/lib/typescript/contexts/channelContext/ChannelContext.d.ts.map +1 -1
- package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts +1 -11
- package/lib/typescript/contexts/channelsContext/ChannelsContext.d.ts.map +1 -1
- package/lib/typescript/contexts/channelsStateContext/ChannelsStateContext.d.ts +1 -27
- package/lib/typescript/contexts/channelsStateContext/ChannelsStateContext.d.ts.map +1 -1
- package/lib/typescript/contexts/channelsStateContext/useChannelState.d.ts +7 -13
- package/lib/typescript/contexts/channelsStateContext/useChannelState.d.ts.map +1 -1
- package/lib/typescript/contexts/chatConfigContext/ChatConfigContext.d.ts +16 -0
- package/lib/typescript/contexts/chatConfigContext/ChatConfigContext.d.ts.map +1 -0
- package/lib/typescript/contexts/chatContext/ChatContext.d.ts +1 -15
- package/lib/typescript/contexts/chatContext/ChatContext.d.ts.map +1 -1
- package/lib/typescript/contexts/imageGalleryContext/ImageGalleryContext.d.ts +0 -10
- package/lib/typescript/contexts/imageGalleryContext/ImageGalleryContext.d.ts.map +1 -1
- package/lib/typescript/contexts/index.d.ts +1 -1
- package/lib/typescript/contexts/index.d.ts.map +1 -1
- package/lib/typescript/contexts/keyboardContext/KeyboardContext.d.ts +0 -11
- package/lib/typescript/contexts/keyboardContext/KeyboardContext.d.ts.map +1 -1
- package/lib/typescript/contexts/messageContext/MessageContext.d.ts +21 -56
- package/lib/typescript/contexts/messageContext/MessageContext.d.ts.map +1 -1
- package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts +2 -12
- package/lib/typescript/contexts/messageInputContext/MessageInputContext.d.ts.map +1 -1
- package/lib/typescript/contexts/messageInputContext/hooks/useCreateMessageInputContext.d.ts.map +1 -1
- package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts +78 -38
- package/lib/typescript/contexts/messagesContext/MessagesContext.d.ts.map +1 -1
- package/lib/typescript/contexts/overlayContext/OverlayContext.d.ts +2 -27
- 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/paginatedMessageListContext/PaginatedMessageListContext.d.ts +18 -27
- package/lib/typescript/contexts/paginatedMessageListContext/PaginatedMessageListContext.d.ts.map +1 -1
- package/lib/typescript/contexts/suggestionsContext/SuggestionsContext.d.ts +1 -11
- package/lib/typescript/contexts/suggestionsContext/SuggestionsContext.d.ts.map +1 -1
- package/lib/typescript/contexts/themeContext/utils/theme.d.ts +69 -44
- package/lib/typescript/contexts/themeContext/utils/theme.d.ts.map +1 -1
- package/lib/typescript/contexts/threadContext/ThreadContext.d.ts +1 -11
- package/lib/typescript/contexts/threadContext/ThreadContext.d.ts.map +1 -1
- package/lib/typescript/contexts/translationContext/TranslationContext.d.ts +0 -11
- package/lib/typescript/contexts/translationContext/TranslationContext.d.ts.map +1 -1
- package/lib/typescript/contexts/typingContext/TypingContext.d.ts +1 -11
- package/lib/typescript/contexts/typingContext/TypingContext.d.ts.map +1 -1
- package/lib/typescript/hooks/useTranslatedMessage.d.ts.map +1 -1
- package/lib/typescript/icons/PinHeader.d.ts +5 -1
- package/lib/typescript/icons/PinHeader.d.ts.map +1 -1
- package/lib/typescript/index.d.ts +2 -3
- package/lib/typescript/index.d.ts.map +1 -1
- package/lib/typescript/native.d.ts +11 -13
- package/lib/typescript/native.d.ts.map +1 -1
- package/lib/typescript/store/SqliteClient.d.ts +27 -0
- package/lib/typescript/store/SqliteClient.d.ts.map +1 -0
- package/lib/typescript/store/apis/addPendingTask.d.ts +1 -1
- package/lib/typescript/store/apis/addPendingTask.d.ts.map +1 -1
- package/lib/typescript/store/apis/deleteChannel.d.ts +1 -1
- package/lib/typescript/store/apis/deleteChannel.d.ts.map +1 -1
- package/lib/typescript/store/apis/deleteMember.d.ts +1 -1
- package/lib/typescript/store/apis/deleteMember.d.ts.map +1 -1
- package/lib/typescript/store/apis/deleteMessage.d.ts +1 -1
- package/lib/typescript/store/apis/deleteMessage.d.ts.map +1 -1
- package/lib/typescript/store/apis/deleteMessagesForChannel.d.ts +1 -1
- package/lib/typescript/store/apis/deleteMessagesForChannel.d.ts.map +1 -1
- package/lib/typescript/store/apis/deletePendingTask.d.ts +1 -1
- package/lib/typescript/store/apis/deletePendingTask.d.ts.map +1 -1
- package/lib/typescript/store/apis/deleteReaction.d.ts +1 -1
- package/lib/typescript/store/apis/deleteReaction.d.ts.map +1 -1
- package/lib/typescript/store/apis/deleteReactions.d.ts +1 -1
- package/lib/typescript/store/apis/deleteReactions.d.ts.map +1 -1
- package/lib/typescript/store/apis/getAllChannelIds.d.ts +1 -1
- package/lib/typescript/store/apis/getAllChannelIds.d.ts.map +1 -1
- package/lib/typescript/store/apis/getAppSettings.d.ts +1 -1
- package/lib/typescript/store/apis/getAppSettings.d.ts.map +1 -1
- package/lib/typescript/store/apis/getChannelMessages.d.ts +1 -1
- package/lib/typescript/store/apis/getChannelMessages.d.ts.map +1 -1
- package/lib/typescript/store/apis/getChannels.d.ts +1 -1
- package/lib/typescript/store/apis/getChannels.d.ts.map +1 -1
- package/lib/typescript/store/apis/getChannelsForFilterSort.d.ts +1 -1
- package/lib/typescript/store/apis/getChannelsForFilterSort.d.ts.map +1 -1
- package/lib/typescript/store/apis/getLastSyncedAt.d.ts +1 -1
- package/lib/typescript/store/apis/getLastSyncedAt.d.ts.map +1 -1
- package/lib/typescript/store/apis/getMembers.d.ts +1 -1
- package/lib/typescript/store/apis/getMembers.d.ts.map +1 -1
- package/lib/typescript/store/apis/getPendingTasks.d.ts +1 -1
- package/lib/typescript/store/apis/getPendingTasks.d.ts.map +1 -1
- package/lib/typescript/store/apis/getReactionsforFilterSort.d.ts +1 -1
- package/lib/typescript/store/apis/getReactionsforFilterSort.d.ts.map +1 -1
- package/lib/typescript/store/apis/getReads.d.ts +1 -1
- package/lib/typescript/store/apis/getReads.d.ts.map +1 -1
- package/lib/typescript/store/apis/insertReaction.d.ts +1 -1
- package/lib/typescript/store/apis/insertReaction.d.ts.map +1 -1
- package/lib/typescript/store/apis/queries/selectChannelIdsForFilterSort.d.ts +1 -1
- package/lib/typescript/store/apis/queries/selectChannelIdsForFilterSort.d.ts.map +1 -1
- package/lib/typescript/store/apis/queries/selectChannels.d.ts +2 -2
- package/lib/typescript/store/apis/queries/selectChannels.d.ts.map +1 -1
- package/lib/typescript/store/apis/queries/selectMembersForChannels.d.ts +1 -1
- package/lib/typescript/store/apis/queries/selectMembersForChannels.d.ts.map +1 -1
- package/lib/typescript/store/apis/queries/selectMessagesForChannels.d.ts +1 -1
- package/lib/typescript/store/apis/queries/selectMessagesForChannels.d.ts.map +1 -1
- package/lib/typescript/store/apis/queries/selectReactionsForMessages.d.ts +1 -1
- package/lib/typescript/store/apis/queries/selectReactionsForMessages.d.ts.map +1 -1
- package/lib/typescript/store/apis/queries/selectReadsForChannels.d.ts +1 -1
- package/lib/typescript/store/apis/queries/selectReadsForChannels.d.ts.map +1 -1
- package/lib/typescript/store/apis/updateMessage.d.ts +1 -1
- package/lib/typescript/store/apis/updateMessage.d.ts.map +1 -1
- package/lib/typescript/store/apis/updatePollMessage.d.ts +1 -1
- package/lib/typescript/store/apis/updatePollMessage.d.ts.map +1 -1
- package/lib/typescript/store/apis/updateReaction.d.ts +1 -1
- package/lib/typescript/store/apis/updateReaction.d.ts.map +1 -1
- package/lib/typescript/store/apis/upsertAppSettings.d.ts +1 -1
- package/lib/typescript/store/apis/upsertAppSettings.d.ts.map +1 -1
- package/lib/typescript/store/apis/upsertChannelData.d.ts +1 -1
- package/lib/typescript/store/apis/upsertChannelData.d.ts.map +1 -1
- package/lib/typescript/store/apis/upsertChannelDataFromChannel.d.ts +1 -1
- package/lib/typescript/store/apis/upsertChannelDataFromChannel.d.ts.map +1 -1
- package/lib/typescript/store/apis/upsertChannels.d.ts +1 -1
- package/lib/typescript/store/apis/upsertChannels.d.ts.map +1 -1
- package/lib/typescript/store/apis/upsertCidsForQuery.d.ts +1 -1
- package/lib/typescript/store/apis/upsertCidsForQuery.d.ts.map +1 -1
- package/lib/typescript/store/apis/upsertMembers.d.ts +1 -1
- package/lib/typescript/store/apis/upsertMembers.d.ts.map +1 -1
- package/lib/typescript/store/apis/upsertMessages.d.ts +1 -1
- package/lib/typescript/store/apis/upsertMessages.d.ts.map +1 -1
- package/lib/typescript/store/apis/upsertReads.d.ts +1 -1
- package/lib/typescript/store/apis/upsertReads.d.ts.map +1 -1
- package/lib/typescript/store/apis/upsertUserSyncStatus.d.ts +1 -1
- package/lib/typescript/store/apis/upsertUserSyncStatus.d.ts.map +1 -1
- package/lib/typescript/test-utils/BetterSqlite.d.ts +2 -2
- package/lib/typescript/test-utils/BetterSqlite.d.ts.map +1 -1
- package/lib/typescript/types/types.d.ts +8 -0
- package/lib/typescript/types/types.d.ts.map +1 -1
- package/lib/typescript/utils/DBSyncManager.d.ts +1 -1
- package/lib/typescript/utils/DBSyncManager.d.ts.map +1 -1
- package/lib/typescript/utils/getResizedImageUrl.d.ts +3 -2
- package/lib/typescript/utils/getResizedImageUrl.d.ts.map +1 -1
- package/lib/typescript/utils/utils.d.ts.map +1 -1
- package/package.json +14 -14
- package/src/__tests__/offline-support/offline-feature.js +220 -176
- package/src/__tests__/offline-support/optimistic-update.js +27 -23
- package/src/components/Attachment/Attachment.tsx +2 -2
- package/src/components/Attachment/Card.tsx +10 -10
- package/src/components/Attachment/FileAttachment.tsx +8 -16
- package/src/components/Attachment/FileAttachmentGroup.tsx +2 -2
- package/src/components/Attachment/Gallery.tsx +21 -18
- package/src/components/Attachment/Giphy.tsx +14 -14
- package/src/components/Attachment/__tests__/Attachment.test.js +4 -2
- package/src/components/Attachment/__tests__/Gallery.test.js +0 -2
- package/src/components/Attachment/utils/buildGallery/buildGallery.ts +10 -1
- package/src/components/Attachment/utils/buildGallery/buildGalleryOfSingleImage.ts +4 -1
- package/src/components/Attachment/utils/buildGallery/buildGalleryOfThreeImages.ts +5 -1
- package/src/components/Attachment/utils/buildGallery/buildGalleryOfTwoImages.ts +6 -1
- package/src/components/Attachment/utils/buildGallery/buildThumbnail.ts +13 -6
- package/src/components/Attachment/utils/buildGallery/buildThumbnailGrid.ts +5 -1
- package/src/components/AttachmentPicker/AttachmentPicker.tsx +7 -2
- package/src/components/AttachmentPicker/components/AttachmentPickerBottomSheetHandle.tsx +2 -2
- package/src/components/AttachmentPicker/components/AttachmentPickerItem.tsx +17 -33
- package/src/components/AttachmentPicker/components/AttachmentPickerSelectionBar.tsx +18 -17
- package/src/components/AutoCompleteInput/AutoCompleteSuggestionList.tsx +1 -1
- package/src/components/Avatar/Avatar.tsx +3 -0
- package/src/components/Avatar/GroupAvatar.tsx +4 -0
- package/src/components/Channel/Channel.tsx +299 -982
- package/src/components/Channel/__tests__/Channel.test.js +244 -13
- package/src/components/Channel/__tests__/ownCapabilities.test.js +57 -57
- package/src/components/Channel/__tests__/useMessageListPagination.test.js +419 -0
- package/src/components/Channel/hooks/useChannelDataState.ts +235 -0
- package/src/components/Channel/hooks/useCreateChannelContext.ts +0 -8
- package/src/components/Channel/hooks/useCreateInputMessageInputContext.ts +2 -6
- package/src/components/Channel/hooks/useCreateMessagesContext.ts +26 -10
- package/src/components/Channel/hooks/useCreatePaginatedMessageListContext.ts +3 -10
- package/src/components/Channel/hooks/useMessageListPagination.tsx +246 -0
- package/src/components/ChannelList/ChannelList.tsx +0 -17
- package/src/components/ChannelList/ChannelListFooterLoadingIndicator.tsx +1 -1
- package/src/components/ChannelList/Skeleton.tsx +9 -1
- package/src/components/ChannelList/__tests__/ChannelList.test.js +5 -5
- package/src/components/ChannelList/hooks/listeners/useNewMessageNotification.ts +2 -11
- package/src/components/ChannelList/hooks/usePaginatedChannels.ts +20 -13
- package/src/components/Chat/Chat.tsx +23 -18
- package/src/components/Chat/__tests__/Chat.test.js +199 -178
- package/src/components/Chat/hooks/handleEventToSyncDB.ts +18 -16
- package/src/components/Chat/hooks/useAppSettings.ts +3 -2
- package/src/components/Chat/hooks/useCreateChatContext.ts +0 -2
- package/src/components/Chat/hooks/useIsOnline.ts +13 -10
- package/src/components/ImageGallery/ImageGallery.tsx +71 -121
- package/src/components/ImageGallery/__tests__/AnimatedVideoGallery.test.tsx +0 -11
- package/src/components/ImageGallery/__tests__/ImageGallery.test.tsx +3 -4
- package/src/components/ImageGallery/__tests__/ImageGalleryFooter.test.tsx +3 -5
- package/src/components/ImageGallery/__tests__/ImageGalleryGrid.test.tsx +1 -1
- package/src/components/ImageGallery/__tests__/ImageGalleryGridHandle.test.tsx +1 -1
- package/src/components/ImageGallery/__tests__/ImageGalleryHeader.test.tsx +3 -5
- package/src/components/ImageGallery/__tests__/ImageGalleryOverlay.test.tsx +0 -3
- package/src/components/ImageGallery/components/AnimatedGalleryImage.tsx +17 -56
- package/src/components/ImageGallery/components/AnimatedGalleryVideo.tsx +21 -56
- package/src/components/ImageGallery/components/ImageGalleryFooter.tsx +73 -59
- package/src/components/ImageGallery/components/ImageGalleryHeader.tsx +46 -45
- package/src/components/ImageGallery/components/ImageGalleryOverlay.tsx +2 -1
- package/src/components/ImageGallery/components/__tests__/ImageGalleryHeader.test.tsx +3 -4
- package/src/components/ImageGallery/hooks/useAnimatedGalleryStyle.tsx +83 -0
- package/src/components/ImageGallery/hooks/useImageGalleryGestures.tsx +495 -470
- package/src/components/Indicators/LoadingIndicator.tsx +1 -1
- package/src/components/Message/Message.tsx +113 -215
- package/src/components/Message/MessageSimple/MessageAvatar.tsx +1 -0
- package/src/components/Message/MessageSimple/MessageBounce.tsx +2 -2
- package/src/components/Message/MessageSimple/MessageContent.tsx +28 -155
- package/src/components/Message/MessageSimple/MessageDeleted.tsx +1 -1
- package/src/components/Message/MessageSimple/MessageFooter.tsx +1 -1
- package/src/components/Message/MessageSimple/MessagePinnedHeader.tsx +21 -66
- package/src/components/Message/MessageSimple/MessageSimple.tsx +245 -54
- package/src/components/Message/MessageSimple/MessageTextContainer.tsx +3 -4
- package/src/components/Message/MessageSimple/ReactionList/ReactionListBottom.tsx +295 -0
- package/src/components/Message/MessageSimple/ReactionList/ReactionListTop.tsx +271 -0
- package/src/components/Message/MessageSimple/__tests__/MessageContent.test.js +1 -2
- package/src/components/Message/MessageSimple/__tests__/MessageSimple.test.js +208 -0
- package/src/components/Message/MessageSimple/__tests__/MessageTextContainer.test.tsx +3 -3
- package/src/components/Message/MessageSimple/__tests__/ReactionListBottom.test.js +166 -0
- package/src/components/Message/MessageSimple/__tests__/ReactionListTop.test.js +92 -0
- package/src/components/Message/MessageSimple/__tests__/__snapshots__/MessagePinnedHeader.test.js.snap +23 -19
- package/src/components/Message/hooks/useCreateMessageContext.ts +4 -16
- package/src/components/Message/hooks/useMessageActions.tsx +48 -68
- package/src/components/Message/hooks/useMessageData.ts +59 -0
- package/src/components/Message/hooks/useProcessReactions.ts +17 -10
- package/src/components/Message/utils/messageActions.ts +10 -20
- package/src/components/MessageInput/FileUploadPreview.tsx +2 -2
- package/src/components/MessageInput/MessageInput.tsx +0 -1
- package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewExpo.test.tsx +1 -4
- package/src/components/MessageInput/__tests__/AudioAttachmentUploadPreviewNative.test.tsx +1 -4
- package/src/components/MessageInput/__tests__/FileUploadPreview.test.js +3 -5
- package/src/components/MessageInput/__tests__/MessageInput.test.js +116 -2
- package/src/components/MessageInput/components/AudioRecorder/AudioRecordingButton.tsx +7 -1
- package/src/components/MessageInput/components/AudioRecorder/AudioRecordingLockIndicator.tsx +0 -1
- package/src/components/MessageInput/components/NativeAttachmentPicker.tsx +8 -1
- package/src/components/MessageInput/hooks/useAudioController.tsx +4 -7
- package/src/components/MessageList/MessageList.tsx +53 -83
- package/src/components/MessageList/ScrollToBottomButton.tsx +1 -1
- package/src/components/MessageList/__tests__/MessageList.test.js +174 -23
- package/src/components/MessageList/__tests__/ScrollToBottomButton.test.js +3 -3
- package/src/components/MessageList/__tests__/__snapshots__/ScrollToBottomButton.test.js.snap +1 -1
- package/src/components/MessageList/hooks/useMessageList.ts +2 -5
- package/src/components/MessageList/utils/getReadStates.ts +3 -2
- package/src/components/MessageMenu/MessageActionList.tsx +49 -0
- package/src/components/MessageMenu/MessageActionListItem.tsx +86 -0
- package/src/components/MessageMenu/MessageMenu.tsx +123 -0
- package/src/components/MessageMenu/MessageReactionPicker.tsx +122 -0
- package/src/components/MessageMenu/MessageUserReactions.tsx +207 -0
- package/src/components/{MessageOverlay/OverlayReactionsAvatar.tsx → MessageMenu/MessageUserReactionsAvatar.tsx} +6 -6
- package/src/components/MessageMenu/MessageUserReactionsItem.tsx +132 -0
- package/src/components/MessageMenu/ReactionButton.tsx +72 -0
- package/src/components/MessageMenu/__tests__/MessageActionList.test.tsx +48 -0
- package/src/components/MessageMenu/__tests__/MessageActionListItem.test.tsx +48 -0
- package/src/components/MessageMenu/__tests__/MessageReactionPicker.test.tsx +101 -0
- package/src/components/MessageMenu/__tests__/MessageUserReactions.test.tsx +186 -0
- package/src/components/MessageMenu/__tests__/MessageUserReactionsAvatar.test.tsx +35 -0
- package/src/components/MessageMenu/__tests__/MessageUserReactionsItem.test.tsx +81 -0
- package/src/components/MessageMenu/__tests__/ReactionButton.test.tsx +77 -0
- package/src/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.ts +4 -2
- package/src/components/Poll/CreatePollContent.tsx +4 -4
- package/src/components/Poll/Poll.tsx +1 -20
- package/src/components/Poll/components/Button.tsx +8 -420
- package/src/components/Poll/components/CreatePollIcon.tsx +1 -1
- package/src/components/Poll/components/CreatePollOptions.tsx +9 -4
- package/src/components/Poll/components/PollAnswersList.tsx +66 -3
- package/src/components/Poll/components/PollButtons.tsx +241 -0
- package/src/components/Poll/components/PollInputDialog.tsx +9 -6
- package/src/components/Poll/components/PollModalHeader.tsx +3 -3
- package/src/components/Poll/components/PollOption.tsx +74 -4
- package/src/components/Poll/components/PollResults/PollOptionFullResults.tsx +1 -1
- package/src/components/Poll/components/PollResults/PollResultItem.tsx +68 -52
- package/src/components/Poll/components/PollResults/PollVote.tsx +68 -0
- package/src/components/Poll/components/index.ts +1 -0
- package/src/components/ProgressControl/ProgressControl.tsx +28 -38
- package/src/components/ProgressControl/WaveProgressBar.tsx +29 -37
- package/src/components/Reply/Reply.tsx +5 -2
- package/src/components/Thread/__tests__/__snapshots__/Thread.test.js.snap +936 -796
- package/src/components/UIComponents/BottomSheetModal.tsx +174 -0
- package/src/components/UIComponents/index.ts +3 -0
- package/src/components/docs/data.js +13 -27
- package/src/components/index.ts +11 -10
- package/src/contexts/__tests__/index.test.tsx +0 -5
- package/src/contexts/activeChannelsRefContext/ActiveChannelsRefContext.tsx +0 -27
- package/src/contexts/attachmentPickerContext/AttachmentPickerContext.tsx +1 -29
- package/src/contexts/channelContext/ChannelContext.tsx +33 -79
- package/src/contexts/channelsContext/ChannelsContext.tsx +1 -28
- package/src/contexts/channelsStateContext/ChannelsStateContext.tsx +2 -97
- package/src/contexts/channelsStateContext/useChannelState.ts +6 -108
- package/src/contexts/chatConfigContext/ChatConfigContext.tsx +33 -0
- package/src/contexts/chatContext/ChatContext.tsx +1 -30
- package/src/contexts/imageGalleryContext/ImageGalleryContext.tsx +0 -29
- package/src/contexts/index.ts +1 -1
- package/src/contexts/keyboardContext/KeyboardContext.tsx +0 -30
- package/src/contexts/messageContext/MessageContext.tsx +22 -75
- package/src/contexts/messageInputContext/MessageInputContext.tsx +12 -39
- package/src/contexts/messageInputContext/__tests__/isValidMessage.test.tsx +2 -3
- package/src/contexts/messageInputContext/__tests__/uploadFile.test.tsx +1 -2
- package/src/contexts/messageInputContext/__tests__/uploadImage.test.tsx +1 -2
- package/src/contexts/messageInputContext/hooks/useCreateMessageInputContext.ts +1 -5
- package/src/contexts/messagesContext/MessagesContext.tsx +84 -57
- package/src/contexts/overlayContext/OverlayContext.tsx +2 -55
- package/src/contexts/overlayContext/OverlayProvider.tsx +23 -64
- package/src/contexts/paginatedMessageListContext/PaginatedMessageListContext.tsx +18 -46
- package/src/contexts/suggestionsContext/SuggestionsContext.tsx +1 -30
- package/src/contexts/themeContext/utils/theme.ts +141 -92
- package/src/contexts/threadContext/ThreadContext.tsx +1 -28
- package/src/contexts/translationContext/TranslationContext.tsx +0 -29
- package/src/contexts/typingContext/TypingContext.tsx +1 -28
- package/src/hooks/__tests__/useTranslatedMessage.test.tsx +3 -9
- package/src/hooks/useTranslatedMessage.ts +1 -4
- package/src/icons/PinHeader.tsx +13 -7
- package/src/index.ts +2 -3
- package/src/mock-builders/DB/mock.ts +70 -87
- package/src/native.ts +18 -29
- package/src/store/SqliteClient.ts +210 -0
- package/src/store/apis/addPendingTask.ts +7 -7
- package/src/store/apis/deleteChannel.ts +4 -4
- package/src/store/apis/deleteMember.ts +4 -4
- package/src/store/apis/deleteMessage.ts +4 -4
- package/src/store/apis/deleteMessagesForChannel.ts +4 -4
- package/src/store/apis/deletePendingTask.ts +4 -4
- package/src/store/apis/deleteReaction.ts +4 -4
- package/src/store/apis/deleteReactions.ts +3 -3
- package/src/store/apis/getAllChannelIds.ts +4 -4
- package/src/store/apis/getAppSettings.ts +5 -5
- package/src/store/apis/getChannelMessages.ts +6 -6
- package/src/store/apis/getChannels.ts +8 -8
- package/src/store/apis/getChannelsForFilterSort.ts +6 -6
- package/src/store/apis/getLastSyncedAt.ts +5 -5
- package/src/store/apis/getMembers.ts +4 -4
- package/src/store/apis/getPendingTasks.ts +4 -4
- package/src/store/apis/getReactions.ts +2 -2
- package/src/store/apis/getReactionsforFilterSort.ts +8 -6
- package/src/store/apis/getReads.ts +4 -4
- package/src/store/apis/insertReaction.ts +4 -4
- package/src/store/apis/queries/selectChannelIdsForFilterSort.ts +5 -5
- package/src/store/apis/queries/selectChannels.ts +6 -6
- package/src/store/apis/queries/selectMembersForChannels.ts +6 -4
- package/src/store/apis/queries/selectMessagesForChannels.ts +7 -5
- package/src/store/apis/queries/selectReactionsForMessages.ts +5 -5
- package/src/store/apis/queries/selectReadsForChannels.ts +7 -5
- package/src/store/apis/updateMessage.ts +5 -5
- package/src/store/apis/updatePollMessage.ts +5 -5
- package/src/store/apis/updateReaction.ts +4 -4
- package/src/store/apis/upsertAppSettings.ts +4 -4
- package/src/store/apis/upsertChannelData.ts +5 -4
- package/src/store/apis/upsertChannelDataFromChannel.ts +3 -3
- package/src/store/apis/upsertChannels.ts +8 -8
- package/src/store/apis/upsertCidsForQuery.ts +4 -4
- package/src/store/apis/upsertMembers.ts +4 -4
- package/src/store/apis/upsertMessages.ts +4 -4
- package/src/store/apis/upsertReads.ts +4 -4
- package/src/store/apis/upsertUserSyncStatus.ts +4 -4
- package/src/test-utils/BetterSqlite.js +4 -12
- package/src/types/types.ts +9 -0
- package/src/utils/DBSyncManager.ts +49 -44
- package/src/utils/__tests__/getResizedImageUrl.test.ts +1 -2
- package/src/utils/getResizedImageUrl.ts +7 -5
- package/src/utils/utils.ts +1 -1
- package/src/version.json +1 -1
- package/lib/commonjs/components/ImageBackground.js.map +0 -1
- package/lib/commonjs/components/Message/MessageSimple/ReactionList.js +0 -305
- package/lib/commonjs/components/Message/MessageSimple/ReactionList.js.map +0 -1
- package/lib/commonjs/components/MessageOverlay/MessageActionList.js +0 -112
- package/lib/commonjs/components/MessageOverlay/MessageActionList.js.map +0 -1
- package/lib/commonjs/components/MessageOverlay/MessageActionListItem.js +0 -87
- package/lib/commonjs/components/MessageOverlay/MessageActionListItem.js.map +0 -1
- package/lib/commonjs/components/MessageOverlay/MessageOverlay.js +0 -461
- package/lib/commonjs/components/MessageOverlay/MessageOverlay.js.map +0 -1
- package/lib/commonjs/components/MessageOverlay/OverlayBackdrop.js +0 -24
- package/lib/commonjs/components/MessageOverlay/OverlayBackdrop.js.map +0 -1
- package/lib/commonjs/components/MessageOverlay/OverlayReactionList.js +0 -305
- package/lib/commonjs/components/MessageOverlay/OverlayReactionList.js.map +0 -1
- package/lib/commonjs/components/MessageOverlay/OverlayReactions.js +0 -188
- package/lib/commonjs/components/MessageOverlay/OverlayReactions.js.map +0 -1
- package/lib/commonjs/components/MessageOverlay/OverlayReactionsAvatar.js.map +0 -1
- package/lib/commonjs/components/MessageOverlay/OverlayReactionsItem.js +0 -166
- package/lib/commonjs/components/MessageOverlay/OverlayReactionsItem.js.map +0 -1
- package/lib/commonjs/components/MessageOverlay/hooks/useFetchReactions.js.map +0 -1
- package/lib/commonjs/components/MessageOverlay/hooks/useMessageActionAnimation.js +0 -34
- package/lib/commonjs/components/MessageOverlay/hooks/useMessageActionAnimation.js.map +0 -1
- package/lib/commonjs/components/Spinner/Spinner.js.map +0 -1
- package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js +0 -45
- package/lib/commonjs/contexts/messageOverlayContext/MessageOverlayContext.js.map +0 -1
- package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.js +0 -27
- package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.js.map +0 -1
- package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.test.js +0 -67
- package/lib/commonjs/contexts/messageOverlayContext/hooks/useResettableState.test.js.map +0 -1
- package/lib/commonjs/store/QuickSqliteClient.js +0 -158
- package/lib/commonjs/store/QuickSqliteClient.js.map +0 -1
- package/lib/commonjs/utils/StreamChatRN.js +0 -25
- package/lib/commonjs/utils/StreamChatRN.js.map +0 -1
- package/lib/module/components/ImageBackground.js.map +0 -1
- package/lib/module/components/Message/MessageSimple/ReactionList.js +0 -305
- package/lib/module/components/Message/MessageSimple/ReactionList.js.map +0 -1
- package/lib/module/components/MessageOverlay/MessageActionList.js +0 -112
- package/lib/module/components/MessageOverlay/MessageActionList.js.map +0 -1
- package/lib/module/components/MessageOverlay/MessageActionListItem.js +0 -87
- package/lib/module/components/MessageOverlay/MessageActionListItem.js.map +0 -1
- package/lib/module/components/MessageOverlay/MessageOverlay.js +0 -461
- package/lib/module/components/MessageOverlay/MessageOverlay.js.map +0 -1
- package/lib/module/components/MessageOverlay/OverlayBackdrop.js +0 -24
- package/lib/module/components/MessageOverlay/OverlayBackdrop.js.map +0 -1
- package/lib/module/components/MessageOverlay/OverlayReactionList.js +0 -305
- package/lib/module/components/MessageOverlay/OverlayReactionList.js.map +0 -1
- package/lib/module/components/MessageOverlay/OverlayReactions.js +0 -188
- package/lib/module/components/MessageOverlay/OverlayReactions.js.map +0 -1
- package/lib/module/components/MessageOverlay/OverlayReactionsAvatar.js.map +0 -1
- package/lib/module/components/MessageOverlay/OverlayReactionsItem.js +0 -166
- package/lib/module/components/MessageOverlay/OverlayReactionsItem.js.map +0 -1
- package/lib/module/components/MessageOverlay/hooks/useFetchReactions.js.map +0 -1
- package/lib/module/components/MessageOverlay/hooks/useMessageActionAnimation.js +0 -34
- package/lib/module/components/MessageOverlay/hooks/useMessageActionAnimation.js.map +0 -1
- package/lib/module/components/Spinner/Spinner.js.map +0 -1
- package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js +0 -45
- package/lib/module/contexts/messageOverlayContext/MessageOverlayContext.js.map +0 -1
- package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.js +0 -27
- package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.js.map +0 -1
- package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.test.js +0 -67
- package/lib/module/contexts/messageOverlayContext/hooks/useResettableState.test.js.map +0 -1
- package/lib/module/store/QuickSqliteClient.js +0 -158
- package/lib/module/store/QuickSqliteClient.js.map +0 -1
- package/lib/module/utils/StreamChatRN.js +0 -25
- package/lib/module/utils/StreamChatRN.js.map +0 -1
- package/lib/typescript/components/ImageBackground.d.ts.map +0 -1
- package/lib/typescript/components/Message/MessageSimple/ReactionList.d.ts +0 -32
- package/lib/typescript/components/Message/MessageSimple/ReactionList.d.ts.map +0 -1
- package/lib/typescript/components/MessageOverlay/MessageActionList.d.ts +0 -14
- package/lib/typescript/components/MessageOverlay/MessageActionList.d.ts.map +0 -1
- package/lib/typescript/components/MessageOverlay/MessageActionListItem.d.ts.map +0 -1
- package/lib/typescript/components/MessageOverlay/MessageOverlay.d.ts +0 -15
- package/lib/typescript/components/MessageOverlay/MessageOverlay.d.ts.map +0 -1
- package/lib/typescript/components/MessageOverlay/OverlayBackdrop.d.ts +0 -8
- package/lib/typescript/components/MessageOverlay/OverlayBackdrop.d.ts.map +0 -1
- package/lib/typescript/components/MessageOverlay/OverlayReactionList.d.ts +0 -36
- package/lib/typescript/components/MessageOverlay/OverlayReactionList.d.ts.map +0 -1
- package/lib/typescript/components/MessageOverlay/OverlayReactions.d.ts +0 -31
- package/lib/typescript/components/MessageOverlay/OverlayReactions.d.ts.map +0 -1
- package/lib/typescript/components/MessageOverlay/OverlayReactionsAvatar.d.ts +0 -11
- package/lib/typescript/components/MessageOverlay/OverlayReactionsAvatar.d.ts.map +0 -1
- package/lib/typescript/components/MessageOverlay/OverlayReactionsItem.d.ts +0 -11
- package/lib/typescript/components/MessageOverlay/OverlayReactionsItem.d.ts.map +0 -1
- package/lib/typescript/components/MessageOverlay/hooks/useFetchReactions.d.ts.map +0 -1
- package/lib/typescript/components/MessageOverlay/hooks/useMessageActionAnimation.d.ts +0 -11
- package/lib/typescript/components/MessageOverlay/hooks/useMessageActionAnimation.d.ts.map +0 -1
- package/lib/typescript/components/Spinner/Spinner.d.ts.map +0 -1
- package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts +0 -80
- package/lib/typescript/contexts/messageOverlayContext/MessageOverlayContext.d.ts.map +0 -1
- package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.d.ts +0 -13
- package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.d.ts.map +0 -1
- package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.test.d.ts +0 -2
- package/lib/typescript/contexts/messageOverlayContext/hooks/useResettableState.test.d.ts.map +0 -1
- package/lib/typescript/store/QuickSqliteClient.d.ts +0 -26
- package/lib/typescript/store/QuickSqliteClient.d.ts.map +0 -1
- package/lib/typescript/utils/StreamChatRN.d.ts +0 -23
- package/lib/typescript/utils/StreamChatRN.d.ts.map +0 -1
- package/src/components/Message/MessageSimple/ReactionList.tsx +0 -398
- package/src/components/MessageOverlay/MessageActionList.tsx +0 -171
- package/src/components/MessageOverlay/MessageActionListItem.tsx +0 -144
- package/src/components/MessageOverlay/MessageOverlay.tsx +0 -648
- package/src/components/MessageOverlay/OverlayBackdrop.tsx +0 -18
- package/src/components/MessageOverlay/OverlayReactionList.tsx +0 -447
- package/src/components/MessageOverlay/OverlayReactions.tsx +0 -252
- package/src/components/MessageOverlay/OverlayReactionsItem.tsx +0 -188
- package/src/components/MessageOverlay/hooks/useMessageActionAnimation.tsx +0 -44
- package/src/contexts/messageOverlayContext/MessageOverlayContext.tsx +0 -148
- package/src/contexts/messageOverlayContext/hooks/useResettableState.test.tsx +0 -48
- package/src/contexts/messageOverlayContext/hooks/useResettableState.ts +0 -22
- package/src/store/QuickSqliteClient.ts +0 -187
- package/src/utils/StreamChatRN.ts +0 -27
- /package/lib/typescript/components/{MessageOverlay → MessageMenu}/hooks/useFetchReactions.d.ts +0 -0
- /package/lib/typescript/components/{ImageBackground.d.ts → UIComponents/ImageBackground.d.ts} +0 -0
- /package/lib/typescript/components/{Spinner → UIComponents}/Spinner.d.ts +0 -0
- /package/src/components/{ImageBackground.tsx → UIComponents/ImageBackground.tsx} +0 -0
- /package/src/components/{Spinner → UIComponents}/Spinner.tsx +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import React, { PropsWithChildren, useCallback, useEffect,
|
|
1
|
+
import React, { PropsWithChildren, useCallback, useEffect, useRef, useState } from 'react';
|
|
2
2
|
import { KeyboardAvoidingViewProps, StyleSheet, Text, View } from 'react-native';
|
|
3
3
|
|
|
4
4
|
import debounce from 'lodash/debounce';
|
|
@@ -11,6 +11,7 @@ import {
|
|
|
11
11
|
ChannelState,
|
|
12
12
|
Channel as ChannelType,
|
|
13
13
|
EventHandler,
|
|
14
|
+
FormatMessageResponse,
|
|
14
15
|
logChatPromiseExecution,
|
|
15
16
|
MessageResponse,
|
|
16
17
|
Reaction,
|
|
@@ -21,6 +22,7 @@ import {
|
|
|
21
22
|
Thread,
|
|
22
23
|
} from 'stream-chat';
|
|
23
24
|
|
|
25
|
+
import { useChannelDataState } from './hooks/useChannelDataState';
|
|
24
26
|
import { useCreateChannelContext } from './hooks/useCreateChannelContext';
|
|
25
27
|
|
|
26
28
|
import { useCreateInputMessageInputContext } from './hooks/useCreateInputMessageInputContext';
|
|
@@ -34,6 +36,7 @@ import { useCreateThreadContext } from './hooks/useCreateThreadContext';
|
|
|
34
36
|
|
|
35
37
|
import { useCreateTypingContext } from './hooks/useCreateTypingContext';
|
|
36
38
|
|
|
39
|
+
import { useMessageListPagination } from './hooks/useMessageListPagination';
|
|
37
40
|
import { useTargetedMessage } from './hooks/useTargetedMessage';
|
|
38
41
|
|
|
39
42
|
import { MessageContextValue } from '../../contexts';
|
|
@@ -81,7 +84,13 @@ import {
|
|
|
81
84
|
ThumbsUpReaction,
|
|
82
85
|
WutReaction,
|
|
83
86
|
} from '../../icons';
|
|
84
|
-
import {
|
|
87
|
+
import {
|
|
88
|
+
FlatList as FlatListDefault,
|
|
89
|
+
isAudioRecorderAvailable,
|
|
90
|
+
isDocumentPickerAvailable,
|
|
91
|
+
isImageMediaLibraryAvailable,
|
|
92
|
+
isImagePickerAvailable,
|
|
93
|
+
} from '../../native';
|
|
85
94
|
import * as dbApi from '../../store/apis';
|
|
86
95
|
import { DefaultStreamChatGenerics, FileTypes } from '../../types/types';
|
|
87
96
|
import { addReactionToLocalState } from '../../utils/addReactionToLocalState';
|
|
@@ -135,7 +144,8 @@ import { MessageRepliesAvatars as MessageRepliesAvatarsDefault } from '../Messag
|
|
|
135
144
|
import { MessageSimple as MessageSimpleDefault } from '../Message/MessageSimple/MessageSimple';
|
|
136
145
|
import { MessageStatus as MessageStatusDefault } from '../Message/MessageSimple/MessageStatus';
|
|
137
146
|
import { MessageTimestamp as MessageTimestampDefault } from '../Message/MessageSimple/MessageTimestamp';
|
|
138
|
-
import {
|
|
147
|
+
import { ReactionListBottom as ReactionListBottomDefault } from '../Message/MessageSimple/ReactionList/ReactionListBottom';
|
|
148
|
+
import { ReactionListTop as ReactionListTopDefault } from '../Message/MessageSimple/ReactionList/ReactionListTop';
|
|
139
149
|
import { StreamingMessageView as DefaultStreamingMessageView } from '../Message/MessageSimple/StreamingMessageView';
|
|
140
150
|
import { AttachButton as AttachButtonDefault } from '../MessageInput/AttachButton';
|
|
141
151
|
import { CommandsButton as CommandsButtonDefault } from '../MessageInput/CommandsButton';
|
|
@@ -169,7 +179,13 @@ import { ScrollToBottomButton as ScrollToBottomButtonDefault } from '../MessageL
|
|
|
169
179
|
import { StickyHeader as StickyHeaderDefault } from '../MessageList/StickyHeader';
|
|
170
180
|
import { TypingIndicator as TypingIndicatorDefault } from '../MessageList/TypingIndicator';
|
|
171
181
|
import { TypingIndicatorContainer as TypingIndicatorContainerDefault } from '../MessageList/TypingIndicatorContainer';
|
|
172
|
-
import {
|
|
182
|
+
import { MessageActionList as MessageActionListDefault } from '../MessageMenu/MessageActionList';
|
|
183
|
+
import { MessageActionListItem as MessageActionListItemDefault } from '../MessageMenu/MessageActionListItem';
|
|
184
|
+
import { MessageMenu as MessageMenuDefault } from '../MessageMenu/MessageMenu';
|
|
185
|
+
import { MessageReactionPicker as MessageReactionPickerDefault } from '../MessageMenu/MessageReactionPicker';
|
|
186
|
+
import { MessageUserReactions as MessageUserReactionsDefault } from '../MessageMenu/MessageUserReactions';
|
|
187
|
+
import { MessageUserReactionsAvatar as MessageUserReactionsAvatarDefault } from '../MessageMenu/MessageUserReactionsAvatar';
|
|
188
|
+
import { MessageUserReactionsItem as MessageUserReactionsItemDefault } from '../MessageMenu/MessageUserReactionsItem';
|
|
173
189
|
import { Reply as ReplyDefault } from '../Reply/Reply';
|
|
174
190
|
|
|
175
191
|
const styles = StyleSheet.create({
|
|
@@ -255,11 +271,11 @@ export type ChannelPropsWithContext<
|
|
|
255
271
|
'messages' | 'loadingMore' | 'loadingMoreRecent'
|
|
256
272
|
>
|
|
257
273
|
> &
|
|
258
|
-
UseChannelStateValue<StreamChatGenerics> &
|
|
274
|
+
Pick<UseChannelStateValue<StreamChatGenerics>, 'threadMessages' | 'setThreadMessages'> &
|
|
259
275
|
Partial<
|
|
260
276
|
Pick<
|
|
261
277
|
MessagesContextValue<StreamChatGenerics>,
|
|
262
|
-
| '
|
|
278
|
+
| 'additionalPressableProps'
|
|
263
279
|
| 'Attachment'
|
|
264
280
|
| 'AttachmentActions'
|
|
265
281
|
| 'AudioAttachment'
|
|
@@ -281,7 +297,6 @@ export type ChannelPropsWithContext<
|
|
|
281
297
|
| 'Giphy'
|
|
282
298
|
| 'giphyVersion'
|
|
283
299
|
| 'handleBan'
|
|
284
|
-
| 'handleBlock'
|
|
285
300
|
| 'handleCopy'
|
|
286
301
|
| 'handleDelete'
|
|
287
302
|
| 'handleEdit'
|
|
@@ -300,6 +315,8 @@ export type ChannelPropsWithContext<
|
|
|
300
315
|
| 'ImageLoadingIndicator'
|
|
301
316
|
| 'markdownRules'
|
|
302
317
|
| 'Message'
|
|
318
|
+
| 'MessageActionList'
|
|
319
|
+
| 'MessageActionListItem'
|
|
303
320
|
| 'messageActions'
|
|
304
321
|
| 'MessageAvatar'
|
|
305
322
|
| 'MessageBounce'
|
|
@@ -311,6 +328,7 @@ export type ChannelPropsWithContext<
|
|
|
311
328
|
| 'MessageFooter'
|
|
312
329
|
| 'MessageHeader'
|
|
313
330
|
| 'MessageList'
|
|
331
|
+
| 'MessageMenu'
|
|
314
332
|
| 'MessagePinnedHeader'
|
|
315
333
|
| 'MessageReplies'
|
|
316
334
|
| 'MessageRepliesAvatars'
|
|
@@ -318,13 +336,19 @@ export type ChannelPropsWithContext<
|
|
|
318
336
|
| 'MessageStatus'
|
|
319
337
|
| 'MessageSystem'
|
|
320
338
|
| 'MessageText'
|
|
339
|
+
| 'messageTextNumberOfLines'
|
|
321
340
|
| 'MessageTimestamp'
|
|
341
|
+
| 'MessageUserReactions'
|
|
322
342
|
| 'myMessageTheme'
|
|
323
343
|
| 'onLongPressMessage'
|
|
324
344
|
| 'onPressInMessage'
|
|
325
345
|
| 'onPressMessage'
|
|
326
|
-
| '
|
|
327
|
-
| '
|
|
346
|
+
| 'MessageReactionPicker'
|
|
347
|
+
| 'MessageUserReactionsAvatar'
|
|
348
|
+
| 'MessageUserReactionsItem'
|
|
349
|
+
| 'ReactionListBottom'
|
|
350
|
+
| 'reactionListPosition'
|
|
351
|
+
| 'ReactionListTop'
|
|
328
352
|
| 'Reply'
|
|
329
353
|
| 'shouldShowUnreadUnderlay'
|
|
330
354
|
| 'ScrollToBottomButton'
|
|
@@ -347,10 +371,6 @@ export type ChannelPropsWithContext<
|
|
|
347
371
|
* Additional props passed to keyboard avoiding view
|
|
348
372
|
*/
|
|
349
373
|
additionalKeyboardAvoidingViewProps?: Partial<KeyboardAvoidingViewProps>;
|
|
350
|
-
/**
|
|
351
|
-
* Disables the channel UI if the channel is frozen
|
|
352
|
-
*/
|
|
353
|
-
disableIfFrozenChannel?: boolean;
|
|
354
374
|
/**
|
|
355
375
|
* When true, disables the KeyboardCompatibleView wrapper
|
|
356
376
|
*
|
|
@@ -418,6 +438,10 @@ export type ChannelPropsWithContext<
|
|
|
418
438
|
* Load the channel at a specified message instead of the most recent message.
|
|
419
439
|
*/
|
|
420
440
|
messageId?: string;
|
|
441
|
+
/**
|
|
442
|
+
* @deprecated
|
|
443
|
+
* The time interval for throttling while updating the message state
|
|
444
|
+
*/
|
|
421
445
|
newMessageStateUpdateThrottleInterval?: number;
|
|
422
446
|
overrideOwnCapabilities?: Partial<OwnCapabilitiesContextValue>;
|
|
423
447
|
stateUpdateThrottleInterval?: number;
|
|
@@ -439,8 +463,8 @@ const ChannelWithContext = <
|
|
|
439
463
|
) => {
|
|
440
464
|
const {
|
|
441
465
|
additionalKeyboardAvoidingViewProps,
|
|
466
|
+
additionalPressableProps,
|
|
442
467
|
additionalTextInputProps,
|
|
443
|
-
additionalTouchableProps,
|
|
444
468
|
allowThreadMessagesInChannel = true,
|
|
445
469
|
asyncMessagesLockDistance = 50,
|
|
446
470
|
asyncMessagesMinimumPressDuration = 500,
|
|
@@ -452,7 +476,7 @@ const ChannelWithContext = <
|
|
|
452
476
|
AudioAttachment = AudioAttachmentDefault,
|
|
453
477
|
AudioAttachmentUploadPreview = AudioAttachmentDefault,
|
|
454
478
|
AudioRecorder = AudioRecorderDefault,
|
|
455
|
-
audioRecordingEnabled =
|
|
479
|
+
audioRecordingEnabled = isAudioRecorderAvailable(),
|
|
456
480
|
AudioRecordingInProgress = AudioRecordingInProgressDefault,
|
|
457
481
|
AudioRecordingLockIndicator = AudioRecordingLockIndicatorDefault,
|
|
458
482
|
AudioRecordingPreview = AudioRecordingPreviewDefault,
|
|
@@ -475,7 +499,6 @@ const ChannelWithContext = <
|
|
|
475
499
|
CreatePollContent,
|
|
476
500
|
DateHeader = DateHeaderDefault,
|
|
477
501
|
deletedMessagesVisibilityType = 'always',
|
|
478
|
-
disableIfFrozenChannel = true,
|
|
479
502
|
disableKeyboardCompatibleView = false,
|
|
480
503
|
disableTypingIndicator,
|
|
481
504
|
dismissKeyboardOnMessageTouch = true,
|
|
@@ -502,7 +525,6 @@ const ChannelWithContext = <
|
|
|
502
525
|
giphyVersion = 'fixed_height',
|
|
503
526
|
handleAttachButtonPress,
|
|
504
527
|
handleBan,
|
|
505
|
-
handleBlock,
|
|
506
528
|
handleCopy,
|
|
507
529
|
handleDelete,
|
|
508
530
|
handleEdit,
|
|
@@ -513,12 +535,12 @@ const ChannelWithContext = <
|
|
|
513
535
|
handleReaction,
|
|
514
536
|
handleRetry,
|
|
515
537
|
handleThreadReply,
|
|
516
|
-
// If pickDocument isn't available, default to hiding the file picker
|
|
517
538
|
hasCameraPicker = isImagePickerAvailable(),
|
|
518
539
|
hasCommands = true,
|
|
519
540
|
hasCreatePoll,
|
|
520
|
-
|
|
521
|
-
|
|
541
|
+
// If pickDocument isn't available, default to hiding the file picker
|
|
542
|
+
hasFilePicker = isDocumentPickerAvailable(),
|
|
543
|
+
hasImagePicker = isImagePickerAvailable() || isImageMediaLibraryAvailable(),
|
|
522
544
|
hideDateSeparators = false,
|
|
523
545
|
hideStickyDateHeader = false,
|
|
524
546
|
ImageLoadingFailedIndicator = ImageLoadingFailedIndicatorDefault,
|
|
@@ -547,10 +569,11 @@ const ChannelWithContext = <
|
|
|
547
569
|
maxMessageLength: maxMessageLengthProp,
|
|
548
570
|
maxNumberOfFiles = 10,
|
|
549
571
|
maxTimeBetweenGroupedMessages,
|
|
550
|
-
members,
|
|
551
572
|
mentionAllAppUsersEnabled = false,
|
|
552
573
|
mentionAllAppUsersQuery,
|
|
553
574
|
Message = MessageDefault,
|
|
575
|
+
MessageActionList = MessageActionListDefault,
|
|
576
|
+
MessageActionListItem = MessageActionListItemDefault,
|
|
554
577
|
messageActions,
|
|
555
578
|
MessageAvatar = MessageAvatarDefault,
|
|
556
579
|
MessageBounce = MessageBounceDefault,
|
|
@@ -571,18 +594,24 @@ const ChannelWithContext = <
|
|
|
571
594
|
MessageHeader,
|
|
572
595
|
messageId,
|
|
573
596
|
MessageList = MessageListDefault,
|
|
597
|
+
MessageMenu = MessageMenuDefault,
|
|
574
598
|
MessagePinnedHeader = MessagePinnedHeaderDefault,
|
|
599
|
+
MessageReactionPicker = MessageReactionPickerDefault,
|
|
575
600
|
MessageReplies = MessageRepliesDefault,
|
|
576
601
|
MessageRepliesAvatars = MessageRepliesAvatarsDefault,
|
|
577
|
-
messages,
|
|
578
602
|
MessageSimple = MessageSimpleDefault,
|
|
579
603
|
MessageStatus = MessageStatusDefault,
|
|
580
604
|
MessageSystem = MessageSystemDefault,
|
|
581
605
|
MessageText,
|
|
606
|
+
messageTextNumberOfLines,
|
|
582
607
|
MessageTimestamp = MessageTimestampDefault,
|
|
608
|
+
MessageUserReactions = MessageUserReactionsDefault,
|
|
609
|
+
MessageUserReactionsAvatar = MessageUserReactionsAvatarDefault,
|
|
610
|
+
MessageUserReactionsItem = MessageUserReactionsItemDefault,
|
|
583
611
|
MoreOptionsButton = MoreOptionsButtonDefault,
|
|
584
612
|
myMessageTheme,
|
|
585
613
|
NetworkDownIndicator = NetworkDownIndicatorDefault,
|
|
614
|
+
// TODO: Think about this one
|
|
586
615
|
newMessageStateUpdateThrottleInterval = defaultThrottleInterval,
|
|
587
616
|
numberOfLines = 5,
|
|
588
617
|
onChangeText,
|
|
@@ -590,11 +619,11 @@ const ChannelWithContext = <
|
|
|
590
619
|
onPressInMessage,
|
|
591
620
|
onPressMessage,
|
|
592
621
|
openPollCreationDialog,
|
|
593
|
-
OverlayReactionList = OverlayReactionListDefault,
|
|
594
622
|
overrideOwnCapabilities,
|
|
595
623
|
PollContent,
|
|
596
|
-
|
|
597
|
-
|
|
624
|
+
ReactionListBottom = ReactionListBottomDefault,
|
|
625
|
+
reactionListPosition = 'top',
|
|
626
|
+
ReactionListTop = ReactionListTopDefault,
|
|
598
627
|
Reply = ReplyDefault,
|
|
599
628
|
ScrollToBottomButton = ScrollToBottomButtonDefault,
|
|
600
629
|
selectReaction,
|
|
@@ -602,13 +631,7 @@ const ChannelWithContext = <
|
|
|
602
631
|
sendImageAsync = false,
|
|
603
632
|
SendMessageDisallowedIndicator = SendMessageDisallowedIndicatorDefault,
|
|
604
633
|
setInputRef,
|
|
605
|
-
setMembers,
|
|
606
|
-
setMessages,
|
|
607
|
-
setRead,
|
|
608
634
|
setThreadMessages,
|
|
609
|
-
setTyping,
|
|
610
|
-
setWatcherCount,
|
|
611
|
-
setWatchers,
|
|
612
635
|
shouldShowUnreadUnderlay = true,
|
|
613
636
|
shouldSyncChannel,
|
|
614
637
|
ShowThreadMessageInChannelButton = ShowThreadMessageInChannelButtonDefault,
|
|
@@ -622,14 +645,11 @@ const ChannelWithContext = <
|
|
|
622
645
|
thread: threadFromProps,
|
|
623
646
|
threadList,
|
|
624
647
|
threadMessages,
|
|
625
|
-
typing,
|
|
626
648
|
TypingIndicator = TypingIndicatorDefault,
|
|
627
649
|
TypingIndicatorContainer = TypingIndicatorContainerDefault,
|
|
628
650
|
UploadProgressIndicator = UploadProgressIndicatorDefault,
|
|
629
651
|
UrlPreview = CardDefault,
|
|
630
652
|
VideoThumbnail = VideoThumbnailDefault,
|
|
631
|
-
watcherCount,
|
|
632
|
-
watchers,
|
|
633
653
|
} = props;
|
|
634
654
|
|
|
635
655
|
const { thread: threadProps, threadInstance } = threadFromProps;
|
|
@@ -644,17 +664,12 @@ const ChannelWithContext = <
|
|
|
644
664
|
colors: { black },
|
|
645
665
|
},
|
|
646
666
|
} = useTheme();
|
|
647
|
-
const [deleted, setDeleted] = useState(false);
|
|
667
|
+
const [deleted, setDeleted] = useState<boolean>(false);
|
|
648
668
|
const [editing, setEditing] = useState<MessageType<StreamChatGenerics> | undefined>(undefined);
|
|
649
669
|
const [error, setError] = useState<Error | boolean>(false);
|
|
650
|
-
const [hasMore, setHasMore] = useState(true);
|
|
651
670
|
const [lastRead, setLastRead] = useState<ChannelContextValue<StreamChatGenerics>['lastRead']>();
|
|
652
|
-
const [
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
const [loadingMoreRecent, setLoadingMoreRecent] = useState(false);
|
|
656
|
-
const [quotedMessage, setQuotedMessage] = useState<boolean | MessageType<StreamChatGenerics>>(
|
|
657
|
-
false,
|
|
671
|
+
const [quotedMessage, setQuotedMessage] = useState<MessageType<StreamChatGenerics> | undefined>(
|
|
672
|
+
undefined,
|
|
658
673
|
);
|
|
659
674
|
const [thread, setThread] = useState<MessageType<StreamChatGenerics> | null>(threadProps || null);
|
|
660
675
|
const [threadHasMore, setThreadHasMore] = useState(true);
|
|
@@ -662,19 +677,7 @@ const ChannelWithContext = <
|
|
|
662
677
|
|
|
663
678
|
const syncingChannelRef = useRef(false);
|
|
664
679
|
|
|
665
|
-
|
|
666
|
-
* Flag to track if we know for sure that there are no more recent messages to load.
|
|
667
|
-
* This is necessary to avoid unnecessary api calls to load recent messages on pagination.
|
|
668
|
-
*/
|
|
669
|
-
const [hasNoMoreRecentMessagesToLoad, setHasNoMoreRecentMessagesToLoad] = useState(true);
|
|
670
|
-
|
|
671
|
-
const { prevTargetedMessage, setTargetedMessage, targetedMessage } = useTargetedMessage();
|
|
672
|
-
|
|
673
|
-
/**
|
|
674
|
-
* If we loaded a channel around message
|
|
675
|
-
* We may have moved latest message to a new message set in that case mark this ref to avoid fetching
|
|
676
|
-
*/
|
|
677
|
-
const hasOverlappingRecentMessagesRef = useRef(false);
|
|
680
|
+
const { setTargetedMessage, targetedMessage } = useTargetedMessage();
|
|
678
681
|
|
|
679
682
|
/**
|
|
680
683
|
* This ref will hold the abort controllers for
|
|
@@ -686,50 +689,142 @@ const ChannelWithContext = <
|
|
|
686
689
|
const channelId = channel?.id || '';
|
|
687
690
|
const pollCreationEnabled = !channel.disconnected && !!channel?.id && channel?.getConfig()?.polls;
|
|
688
691
|
|
|
692
|
+
const {
|
|
693
|
+
copyStateFromChannel,
|
|
694
|
+
initStateFromChannel,
|
|
695
|
+
setTyping,
|
|
696
|
+
state: channelState,
|
|
697
|
+
} = useChannelDataState<StreamChatGenerics>(channel);
|
|
698
|
+
|
|
699
|
+
const {
|
|
700
|
+
copyMessagesStateFromChannel,
|
|
701
|
+
loadChannelAroundMessage: loadChannelAroundMessageFn,
|
|
702
|
+
loadChannelAtFirstUnreadMessage,
|
|
703
|
+
loadInitialMessagesStateFromChannel,
|
|
704
|
+
loadLatestMessages,
|
|
705
|
+
loadMore,
|
|
706
|
+
loadMoreRecent,
|
|
707
|
+
state: channelMessagesState,
|
|
708
|
+
} = useMessageListPagination<StreamChatGenerics>({
|
|
709
|
+
channel,
|
|
710
|
+
});
|
|
711
|
+
|
|
712
|
+
/**
|
|
713
|
+
* Since we copy the current channel state all together, we need to find the greatest time among the below two and apply it as the throttling time for copying the channel state.
|
|
714
|
+
* This is done until we remove the newMessageStateUpdateThrottleInterval prop.
|
|
715
|
+
*/
|
|
716
|
+
const copyChannelStateThrottlingTime =
|
|
717
|
+
newMessageStateUpdateThrottleInterval > stateUpdateThrottleInterval
|
|
718
|
+
? newMessageStateUpdateThrottleInterval
|
|
719
|
+
: stateUpdateThrottleInterval;
|
|
720
|
+
|
|
721
|
+
const copyChannelState = useRef(
|
|
722
|
+
throttle(
|
|
723
|
+
() => {
|
|
724
|
+
if (channel) {
|
|
725
|
+
copyStateFromChannel(channel);
|
|
726
|
+
copyMessagesStateFromChannel(channel);
|
|
727
|
+
}
|
|
728
|
+
},
|
|
729
|
+
copyChannelStateThrottlingTime,
|
|
730
|
+
throttleOptions,
|
|
731
|
+
),
|
|
732
|
+
).current;
|
|
733
|
+
|
|
734
|
+
const handleEvent: EventHandler<StreamChatGenerics> = (event) => {
|
|
735
|
+
if (shouldSyncChannel) {
|
|
736
|
+
// Ignore user.watching.start and user.watching.stop events
|
|
737
|
+
const ignorableEvents = ['user.watching.start', 'user.watching.stop'];
|
|
738
|
+
if (ignorableEvents.includes(event.type)) return;
|
|
739
|
+
|
|
740
|
+
// If the event is typing.start or typing.stop, set the typing state
|
|
741
|
+
const isTypingEvent = event.type === 'typing.start' || event.type === 'typing.stop';
|
|
742
|
+
if (isTypingEvent) {
|
|
743
|
+
setTyping(channel);
|
|
744
|
+
} else {
|
|
745
|
+
if (thread?.id) {
|
|
746
|
+
const updatedThreadMessages =
|
|
747
|
+
(thread.id && channel && channel.state.threads[thread.id]) || threadMessages;
|
|
748
|
+
setThreadMessages(updatedThreadMessages);
|
|
749
|
+
|
|
750
|
+
if (channel && event.message?.id === thread.id && !threadInstance) {
|
|
751
|
+
const updatedThread = channel.state.formatMessage(event.message);
|
|
752
|
+
setThread(updatedThread);
|
|
753
|
+
}
|
|
754
|
+
}
|
|
755
|
+
}
|
|
756
|
+
|
|
757
|
+
// only update channel state if the events are not the previously subscribed useEffect's subscription events
|
|
758
|
+
if (channel && channel.initialized) {
|
|
759
|
+
copyChannelState();
|
|
760
|
+
}
|
|
761
|
+
}
|
|
762
|
+
};
|
|
763
|
+
|
|
689
764
|
useEffect(() => {
|
|
765
|
+
let listener: ReturnType<typeof channel.on>;
|
|
690
766
|
const initChannel = async () => {
|
|
691
767
|
if (!channel || !shouldSyncChannel || channel.offlineMode) return;
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
768
|
+
let errored = false;
|
|
769
|
+
|
|
770
|
+
if (!channel.initialized || !channel.state.isUpToDate) {
|
|
771
|
+
try {
|
|
772
|
+
await channel?.watch();
|
|
773
|
+
} catch (err) {
|
|
774
|
+
console.warn('Channel watch request failed with error:', err);
|
|
775
|
+
setError(true);
|
|
776
|
+
errored = true;
|
|
777
|
+
}
|
|
700
778
|
}
|
|
701
779
|
|
|
702
|
-
if (
|
|
703
|
-
|
|
780
|
+
if (!errored) {
|
|
781
|
+
initStateFromChannel(channel);
|
|
782
|
+
loadInitialMessagesStateFromChannel(channel, channel.state.messagePagination.hasPrev);
|
|
704
783
|
}
|
|
705
|
-
|
|
706
|
-
|
|
784
|
+
|
|
785
|
+
if (messageId) {
|
|
786
|
+
await loadChannelAroundMessage({ messageId, setTargetedMessage });
|
|
787
|
+
} else if (
|
|
707
788
|
initialScrollToFirstUnreadMessage &&
|
|
708
789
|
channel.countUnread() > scrollToFirstUnreadThreshold
|
|
709
790
|
) {
|
|
710
|
-
loadChannelAtFirstUnreadMessage();
|
|
711
|
-
}
|
|
712
|
-
// If the messageId is undefined and the last message and the current message id do not match we load the channel at the very bottom.
|
|
713
|
-
else if (
|
|
714
|
-
channel.state.messages?.[channel.state.messages.length - 1]?.id !==
|
|
715
|
-
channel.state.latestMessages?.[channel.state.latestMessages.length - 1]?.id &&
|
|
716
|
-
!messageId
|
|
717
|
-
) {
|
|
718
|
-
await loadChannel();
|
|
791
|
+
await loadChannelAtFirstUnreadMessage({ setTargetedMessage });
|
|
719
792
|
}
|
|
793
|
+
listener = channel.on(handleEvent);
|
|
720
794
|
};
|
|
721
795
|
|
|
722
796
|
initChannel();
|
|
723
797
|
|
|
724
798
|
return () => {
|
|
725
799
|
copyChannelState.cancel();
|
|
726
|
-
copyReadState.cancel();
|
|
727
|
-
copyTypingState.cancel();
|
|
728
|
-
loadMoreFinished.cancel();
|
|
729
800
|
loadMoreThreadFinished.cancel();
|
|
801
|
+
listener?.unsubscribe();
|
|
730
802
|
};
|
|
731
803
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
732
|
-
}, [
|
|
804
|
+
}, [channel.cid, messageId, shouldSyncChannel]);
|
|
805
|
+
|
|
806
|
+
// subscribe to channel.deleted event
|
|
807
|
+
useEffect(() => {
|
|
808
|
+
const { unsubscribe } = client.on('channel.deleted', (event) => {
|
|
809
|
+
if (event.cid === channel?.cid) {
|
|
810
|
+
setDeleted(true);
|
|
811
|
+
}
|
|
812
|
+
});
|
|
813
|
+
|
|
814
|
+
return unsubscribe;
|
|
815
|
+
}, [channel?.cid, client]);
|
|
816
|
+
|
|
817
|
+
/**
|
|
818
|
+
* Subscription to the Notification mark_read event.
|
|
819
|
+
*/
|
|
820
|
+
useEffect(() => {
|
|
821
|
+
const handleEvent: EventHandler<StreamChatGenerics> = (event) => {
|
|
822
|
+
if (channel.cid === event.cid) copyChannelState();
|
|
823
|
+
};
|
|
824
|
+
|
|
825
|
+
const { unsubscribe } = client.on('notification.mark_read', handleEvent);
|
|
826
|
+
return unsubscribe;
|
|
827
|
+
}, [channel.cid, client, copyChannelState]);
|
|
733
828
|
|
|
734
829
|
const threadPropsExists = !!threadProps;
|
|
735
830
|
|
|
@@ -760,17 +855,6 @@ const ChannelWithContext = <
|
|
|
760
855
|
|
|
761
856
|
useAppStateListener(undefined, handleAppBackground);
|
|
762
857
|
|
|
763
|
-
/**
|
|
764
|
-
* CHANNEL CONSTANTS
|
|
765
|
-
*/
|
|
766
|
-
const isAdmin = client?.user?.role === 'admin' || channel?.state.membership.role === 'admin';
|
|
767
|
-
|
|
768
|
-
const isModerator =
|
|
769
|
-
channel?.state.membership.role === 'channel_moderator' ||
|
|
770
|
-
channel?.state.membership.role === 'moderator';
|
|
771
|
-
|
|
772
|
-
const isOwner = channel?.state.membership.role === 'owner';
|
|
773
|
-
|
|
774
858
|
/**
|
|
775
859
|
* CHANNEL METHODS
|
|
776
860
|
*/
|
|
@@ -792,464 +876,6 @@ const ChannelWithContext = <
|
|
|
792
876
|
),
|
|
793
877
|
).current;
|
|
794
878
|
|
|
795
|
-
const copyMessagesState = useRef(
|
|
796
|
-
throttle(
|
|
797
|
-
() => {
|
|
798
|
-
if (channel) {
|
|
799
|
-
clearInterval(mergeSetsIntervalRef.current);
|
|
800
|
-
setMessages(channel.state.messages);
|
|
801
|
-
restartSetsMergeFuncRef.current();
|
|
802
|
-
}
|
|
803
|
-
},
|
|
804
|
-
newMessageStateUpdateThrottleInterval,
|
|
805
|
-
throttleOptions,
|
|
806
|
-
),
|
|
807
|
-
).current;
|
|
808
|
-
|
|
809
|
-
const copyTypingState = useRef(
|
|
810
|
-
throttle(
|
|
811
|
-
() => {
|
|
812
|
-
if (channel) {
|
|
813
|
-
setTyping({ ...channel.state.typing });
|
|
814
|
-
}
|
|
815
|
-
},
|
|
816
|
-
stateUpdateThrottleInterval,
|
|
817
|
-
throttleOptions,
|
|
818
|
-
),
|
|
819
|
-
).current;
|
|
820
|
-
|
|
821
|
-
const copyReadState = useRef(
|
|
822
|
-
throttle(
|
|
823
|
-
() => {
|
|
824
|
-
if (channel) {
|
|
825
|
-
setRead({ ...channel.state.read });
|
|
826
|
-
}
|
|
827
|
-
},
|
|
828
|
-
stateUpdateThrottleInterval,
|
|
829
|
-
throttleOptions,
|
|
830
|
-
),
|
|
831
|
-
).current;
|
|
832
|
-
|
|
833
|
-
const copyChannelState = useRef(
|
|
834
|
-
throttle(
|
|
835
|
-
() => {
|
|
836
|
-
setLoading(false);
|
|
837
|
-
if (channel) {
|
|
838
|
-
setMembers({ ...channel.state.members });
|
|
839
|
-
setMessages([...channel.state.messages]);
|
|
840
|
-
setRead({ ...channel.state.read });
|
|
841
|
-
setTyping({ ...channel.state.typing });
|
|
842
|
-
setWatcherCount(channel.state.watcher_count);
|
|
843
|
-
setWatchers({ ...channel.state.watchers });
|
|
844
|
-
}
|
|
845
|
-
},
|
|
846
|
-
stateUpdateThrottleInterval,
|
|
847
|
-
throttleOptions,
|
|
848
|
-
),
|
|
849
|
-
).current;
|
|
850
|
-
|
|
851
|
-
// subscribe to specific channel events
|
|
852
|
-
useEffect(() => {
|
|
853
|
-
const channelSubscriptions: Array<ReturnType<ChannelType['on']>> = [];
|
|
854
|
-
if (channel && shouldSyncChannel) {
|
|
855
|
-
channelSubscriptions.push(channel.on('message.new', copyMessagesState));
|
|
856
|
-
channelSubscriptions.push(channel.on('message.read', copyReadState));
|
|
857
|
-
channelSubscriptions.push(channel.on('typing.start', copyTypingState));
|
|
858
|
-
channelSubscriptions.push(channel.on('typing.stop', copyTypingState));
|
|
859
|
-
}
|
|
860
|
-
return () => {
|
|
861
|
-
channelSubscriptions.forEach((s) => s.unsubscribe());
|
|
862
|
-
};
|
|
863
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
864
|
-
}, [channelId, shouldSyncChannel]);
|
|
865
|
-
|
|
866
|
-
// subscribe to the generic all channel event
|
|
867
|
-
useEffect(() => {
|
|
868
|
-
const handleEvent: EventHandler<StreamChatGenerics> = (event) => {
|
|
869
|
-
const ignorableEvents = ['user.watching.start', 'user.watching.stop'];
|
|
870
|
-
if (ignorableEvents.includes(event.type)) return;
|
|
871
|
-
if (shouldSyncChannel) {
|
|
872
|
-
const isTypingEvent = event.type === 'typing.start' || event.type === 'typing.stop';
|
|
873
|
-
if (!isTypingEvent) {
|
|
874
|
-
if (thread?.id) {
|
|
875
|
-
const updatedThreadMessages =
|
|
876
|
-
(thread.id && channel && channel.state.threads[thread.id]) || threadMessages;
|
|
877
|
-
setThreadMessages(updatedThreadMessages);
|
|
878
|
-
}
|
|
879
|
-
|
|
880
|
-
if (channel && thread?.id && event.message?.id === thread.id && !threadInstance) {
|
|
881
|
-
const updatedThread = channel.state.formatMessage(event.message);
|
|
882
|
-
setThread(updatedThread);
|
|
883
|
-
}
|
|
884
|
-
}
|
|
885
|
-
|
|
886
|
-
// only update channel state if the events are not the previously subscribed useEffect's subscription events
|
|
887
|
-
if (
|
|
888
|
-
channel &&
|
|
889
|
-
channel.initialized &&
|
|
890
|
-
event.type !== 'message.new' &&
|
|
891
|
-
event.type !== 'message.read' &&
|
|
892
|
-
event.type !== 'typing.start' &&
|
|
893
|
-
event.type !== 'typing.stop'
|
|
894
|
-
) {
|
|
895
|
-
copyChannelState();
|
|
896
|
-
}
|
|
897
|
-
}
|
|
898
|
-
};
|
|
899
|
-
const { unsubscribe } = channel.on(handleEvent);
|
|
900
|
-
return unsubscribe;
|
|
901
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
902
|
-
}, [channelId, thread?.id, shouldSyncChannel]);
|
|
903
|
-
|
|
904
|
-
// subscribe to channel.deleted event
|
|
905
|
-
useEffect(() => {
|
|
906
|
-
const { unsubscribe } = client.on('channel.deleted', (event) => {
|
|
907
|
-
if (event.cid === channel?.cid) {
|
|
908
|
-
setDeleted(true);
|
|
909
|
-
}
|
|
910
|
-
});
|
|
911
|
-
|
|
912
|
-
return unsubscribe;
|
|
913
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
914
|
-
}, [channelId]);
|
|
915
|
-
|
|
916
|
-
useEffect(() => {
|
|
917
|
-
const handleEvent: EventHandler<StreamChatGenerics> = (event) => {
|
|
918
|
-
if (channel.cid === event.cid) copyChannelState();
|
|
919
|
-
};
|
|
920
|
-
|
|
921
|
-
const { unsubscribe } = client.on('notification.mark_read', handleEvent);
|
|
922
|
-
return unsubscribe;
|
|
923
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
924
|
-
}, []);
|
|
925
|
-
|
|
926
|
-
const channelQueryCallRef = useRef(
|
|
927
|
-
async (
|
|
928
|
-
queryCall: () => Promise<void>,
|
|
929
|
-
onAfterQueryCall: (() => void) | undefined = undefined,
|
|
930
|
-
// if we are scrolling to a message after the query, pass it here
|
|
931
|
-
scrollToMessageId: string | (() => string | undefined) | undefined = undefined,
|
|
932
|
-
) => {
|
|
933
|
-
setError(false);
|
|
934
|
-
try {
|
|
935
|
-
clearInterval(mergeSetsIntervalRef.current);
|
|
936
|
-
await queryCall();
|
|
937
|
-
setLastRead(new Date());
|
|
938
|
-
setHasMore(true);
|
|
939
|
-
const currentMessages = channel.state.messages;
|
|
940
|
-
const hadCurrentLatestMessages =
|
|
941
|
-
currentMessages.length > 0 && currentMessages === channel.state.latestMessages;
|
|
942
|
-
if (typeof scrollToMessageId === 'function') {
|
|
943
|
-
scrollToMessageId = scrollToMessageId();
|
|
944
|
-
}
|
|
945
|
-
|
|
946
|
-
const scrollToMessageIndex = scrollToMessageId
|
|
947
|
-
? currentMessages.findIndex(({ id }) => id === scrollToMessageId)
|
|
948
|
-
: -1;
|
|
949
|
-
if (channel && scrollToMessageIndex !== -1) {
|
|
950
|
-
copyChannelState.cancel();
|
|
951
|
-
// We assume that on average user sees 5 messages on screen
|
|
952
|
-
// We dont want new renders to happen while scrolling to the targeted message
|
|
953
|
-
// hence we limit the number of messages to be rendered after the targeted message to 5 - 1 = 4
|
|
954
|
-
// NOTE: we have one drawback here, if there were already a split latest and current message set
|
|
955
|
-
// the previous latest message set will be thrown away as we cannot merge it with the current message set after the target message is set
|
|
956
|
-
const limitAfter = 4;
|
|
957
|
-
const currentLength = currentMessages.length;
|
|
958
|
-
const noOfMessagesAfter = currentLength - scrollToMessageIndex - 1;
|
|
959
|
-
// number of messages are over the limit, limit the length of messages
|
|
960
|
-
if (noOfMessagesAfter > limitAfter) {
|
|
961
|
-
const endIndex = scrollToMessageIndex + limitAfter;
|
|
962
|
-
channel.state.clearMessages();
|
|
963
|
-
channel.state.messages = currentMessages.slice(0, endIndex + 1);
|
|
964
|
-
splitLatestCurrentMessageSetRef.current();
|
|
965
|
-
const restOfMessages = currentMessages.slice(endIndex + 1);
|
|
966
|
-
if (hadCurrentLatestMessages) {
|
|
967
|
-
const latestSet = channel.state.messageSets.find((set) => set.isLatest);
|
|
968
|
-
if (latestSet) {
|
|
969
|
-
latestSet.messages = restOfMessages;
|
|
970
|
-
hasOverlappingRecentMessagesRef.current = true;
|
|
971
|
-
}
|
|
972
|
-
}
|
|
973
|
-
}
|
|
974
|
-
}
|
|
975
|
-
const hasLatestMessages = channel.state.latestMessages.length > 0;
|
|
976
|
-
channel.state.setIsUpToDate(hasLatestMessages);
|
|
977
|
-
setHasNoMoreRecentMessagesToLoad(hasLatestMessages);
|
|
978
|
-
copyChannelState();
|
|
979
|
-
if (scrollToMessageIndex !== -1) {
|
|
980
|
-
// since we need to scroll after immediately do this without throttle
|
|
981
|
-
copyChannelState.flush();
|
|
982
|
-
}
|
|
983
|
-
onAfterQueryCall?.();
|
|
984
|
-
} catch (err) {
|
|
985
|
-
if (err instanceof Error) {
|
|
986
|
-
setError(err);
|
|
987
|
-
} else {
|
|
988
|
-
setError(true);
|
|
989
|
-
}
|
|
990
|
-
setLoading(false);
|
|
991
|
-
setLastRead(new Date());
|
|
992
|
-
}
|
|
993
|
-
},
|
|
994
|
-
);
|
|
995
|
-
|
|
996
|
-
/**
|
|
997
|
-
* Loads channel at first unread message.
|
|
998
|
-
*/
|
|
999
|
-
const loadChannelAtFirstUnreadMessage = () => {
|
|
1000
|
-
if (!channel) return;
|
|
1001
|
-
let unreadMessageIdToScrollTo: string | undefined;
|
|
1002
|
-
// query for messages around the last read date
|
|
1003
|
-
return channelQueryCallRef.current(
|
|
1004
|
-
async () => {
|
|
1005
|
-
const unreadCount = channel.countUnread();
|
|
1006
|
-
if (unreadCount === 0) return;
|
|
1007
|
-
const isLatestMessageSetShown = !!channel.state.messageSets.find(
|
|
1008
|
-
(set) => set.isCurrent && set.isLatest,
|
|
1009
|
-
);
|
|
1010
|
-
if (isLatestMessageSetShown && unreadCount <= channel.state.messages.length) {
|
|
1011
|
-
unreadMessageIdToScrollTo =
|
|
1012
|
-
channel.state.messages[channel.state.messages.length - unreadCount].id;
|
|
1013
|
-
return;
|
|
1014
|
-
}
|
|
1015
|
-
const lastReadDate = channel.lastRead();
|
|
1016
|
-
|
|
1017
|
-
// if last read date is present we can just fetch messages around that date
|
|
1018
|
-
// last read date not being present is an edge case if somewhere the user of SDK deletes the read state (this will usually never happen)
|
|
1019
|
-
if (lastReadDate) {
|
|
1020
|
-
setLoading(true);
|
|
1021
|
-
// get totally 30 messages... max 15 before last read date and max 15 after last read date
|
|
1022
|
-
// ref: https://github.com/GetStream/chat/pull/2588
|
|
1023
|
-
const res = await channel.query(
|
|
1024
|
-
{
|
|
1025
|
-
messages: {
|
|
1026
|
-
created_at_around: lastReadDate,
|
|
1027
|
-
limit: 30,
|
|
1028
|
-
},
|
|
1029
|
-
watch: true,
|
|
1030
|
-
},
|
|
1031
|
-
'new',
|
|
1032
|
-
);
|
|
1033
|
-
unreadMessageIdToScrollTo = res.messages.find(
|
|
1034
|
-
(m) => lastReadDate < (m.created_at ? new Date(m.created_at) : new Date()),
|
|
1035
|
-
)?.id;
|
|
1036
|
-
if (unreadMessageIdToScrollTo) {
|
|
1037
|
-
channel.state.loadMessageIntoState(unreadMessageIdToScrollTo);
|
|
1038
|
-
}
|
|
1039
|
-
} else {
|
|
1040
|
-
await loadLatestMessagesRef.current();
|
|
1041
|
-
}
|
|
1042
|
-
},
|
|
1043
|
-
() => {
|
|
1044
|
-
if (unreadMessageIdToScrollTo) {
|
|
1045
|
-
restartSetsMergeFuncRef.current();
|
|
1046
|
-
}
|
|
1047
|
-
},
|
|
1048
|
-
() => unreadMessageIdToScrollTo,
|
|
1049
|
-
);
|
|
1050
|
-
};
|
|
1051
|
-
|
|
1052
|
-
/**
|
|
1053
|
-
* Loads channel around a specific message
|
|
1054
|
-
*
|
|
1055
|
-
* @param messageId If undefined, channel will be loaded at most recent message.
|
|
1056
|
-
*/
|
|
1057
|
-
const loadChannelAroundMessage: ChannelContextValue<StreamChatGenerics>['loadChannelAroundMessage'] =
|
|
1058
|
-
async ({ messageId: messageIdToLoadAround }) => {
|
|
1059
|
-
if (thread) {
|
|
1060
|
-
if (messageIdToLoadAround) {
|
|
1061
|
-
setThreadLoadingMore(true);
|
|
1062
|
-
try {
|
|
1063
|
-
await channel.state.loadMessageIntoState(messageIdToLoadAround, thread.id);
|
|
1064
|
-
setThreadLoadingMore(false);
|
|
1065
|
-
setThreadMessages(channel.state.threads[thread.id]);
|
|
1066
|
-
setTargetedMessage(messageIdToLoadAround);
|
|
1067
|
-
} catch (err) {
|
|
1068
|
-
if (err instanceof Error) {
|
|
1069
|
-
setError(err);
|
|
1070
|
-
} else {
|
|
1071
|
-
setError(true);
|
|
1072
|
-
}
|
|
1073
|
-
setThreadLoadingMore(false);
|
|
1074
|
-
}
|
|
1075
|
-
}
|
|
1076
|
-
} else {
|
|
1077
|
-
await channelQueryCallRef.current(
|
|
1078
|
-
async () => {
|
|
1079
|
-
setLoading(true);
|
|
1080
|
-
if (messageIdToLoadAround) {
|
|
1081
|
-
setMessages([]);
|
|
1082
|
-
await channel.state.loadMessageIntoState(messageIdToLoadAround);
|
|
1083
|
-
const currentMessageSet = channel.state.messageSets.find((set) => set.isCurrent);
|
|
1084
|
-
if (currentMessageSet && !currentMessageSet?.isLatest) {
|
|
1085
|
-
// if the current message set is not the latest, we will throw away the latest messages
|
|
1086
|
-
// in order to attempt to not throw away, will attempt to merge it by loading 25 more messages
|
|
1087
|
-
const recentCurrentSetMsgId =
|
|
1088
|
-
currentMessageSet.messages[currentMessageSet.messages.length - 1].id;
|
|
1089
|
-
await channel.query(
|
|
1090
|
-
{
|
|
1091
|
-
messages: {
|
|
1092
|
-
id_gte: recentCurrentSetMsgId,
|
|
1093
|
-
limit: 25,
|
|
1094
|
-
},
|
|
1095
|
-
},
|
|
1096
|
-
'current',
|
|
1097
|
-
);
|
|
1098
|
-
// if the gap is more than 25, we will unfortunately have to throw away the latest messages
|
|
1099
|
-
}
|
|
1100
|
-
}
|
|
1101
|
-
},
|
|
1102
|
-
() => {
|
|
1103
|
-
if (messageIdToLoadAround) {
|
|
1104
|
-
clearInterval(mergeSetsIntervalRef.current); // do not merge sets as we will scroll/highlight to the message
|
|
1105
|
-
setTargetedMessage(messageIdToLoadAround);
|
|
1106
|
-
}
|
|
1107
|
-
},
|
|
1108
|
-
messageIdToLoadAround,
|
|
1109
|
-
);
|
|
1110
|
-
}
|
|
1111
|
-
};
|
|
1112
|
-
|
|
1113
|
-
useEffect(() => {
|
|
1114
|
-
if (!targetedMessage && prevTargetedMessage) {
|
|
1115
|
-
// we cleared the merge sets interval to wait for the targeted message to be set
|
|
1116
|
-
// now restart it since its done
|
|
1117
|
-
restartSetsMergeFuncRef.current();
|
|
1118
|
-
}
|
|
1119
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1120
|
-
}, [targetedMessage]);
|
|
1121
|
-
|
|
1122
|
-
/**
|
|
1123
|
-
* @deprecated use loadChannelAroundMessage instead
|
|
1124
|
-
*
|
|
1125
|
-
* Loads channel at specific message
|
|
1126
|
-
*
|
|
1127
|
-
* @param messageId If undefined, channel will be loaded at most recent message.
|
|
1128
|
-
* @param before Number of message to query before messageId
|
|
1129
|
-
* @param after Number of message to query after messageId
|
|
1130
|
-
*/
|
|
1131
|
-
const loadChannelAtMessage: ChannelContextValue<StreamChatGenerics>['loadChannelAtMessage'] = ({
|
|
1132
|
-
after = 2,
|
|
1133
|
-
before = 30,
|
|
1134
|
-
messageId,
|
|
1135
|
-
}) =>
|
|
1136
|
-
channelQueryCallRef.current(async () => {
|
|
1137
|
-
await queryAtMessage({ after, before, messageId });
|
|
1138
|
-
|
|
1139
|
-
if (messageId) {
|
|
1140
|
-
setTargetedMessage(messageId);
|
|
1141
|
-
}
|
|
1142
|
-
});
|
|
1143
|
-
|
|
1144
|
-
/**
|
|
1145
|
-
* Utility method to mark that current set if latest into two.
|
|
1146
|
-
* With an empty latest set
|
|
1147
|
-
* This is useful when we know that we dont know the latest messages anymore
|
|
1148
|
-
* Or if we are loading a channel around a message
|
|
1149
|
-
*/
|
|
1150
|
-
const splitLatestCurrentMessageSetRef = useRef(() => {
|
|
1151
|
-
const currentLatestSet = channel.state.messageSets.find((set) => set.isCurrent && set.isLatest);
|
|
1152
|
-
if (!currentLatestSet) return;
|
|
1153
|
-
// unmark the current latest set
|
|
1154
|
-
currentLatestSet.isLatest = false;
|
|
1155
|
-
// create a new set with empty latest messages
|
|
1156
|
-
channel.state.messageSets.push({
|
|
1157
|
-
isCurrent: false,
|
|
1158
|
-
isLatest: true,
|
|
1159
|
-
messages: [],
|
|
1160
|
-
pagination: {
|
|
1161
|
-
hasNext: true,
|
|
1162
|
-
hasPrev: true,
|
|
1163
|
-
},
|
|
1164
|
-
});
|
|
1165
|
-
});
|
|
1166
|
-
|
|
1167
|
-
/**
|
|
1168
|
-
* Utility method to merge current and latest message set.
|
|
1169
|
-
* Returns true if merge was successful, false otherwise.
|
|
1170
|
-
*/
|
|
1171
|
-
const mergeOverlappingMessageSetsRef = useRef((limitToMaxRenderPerBatch = false) => {
|
|
1172
|
-
if (hasOverlappingRecentMessagesRef.current) {
|
|
1173
|
-
const limit = 5; // 5 is the load to recent limit, a larger value seems to cause jumpiness in some devices..
|
|
1174
|
-
// merge current and latest sets
|
|
1175
|
-
const latestMessageSet = channel.state.messageSets.find((set) => set.isLatest);
|
|
1176
|
-
const currentMessageSet = channel.state.messageSets.find((set) => set.isCurrent);
|
|
1177
|
-
if (latestMessageSet && currentMessageSet && latestMessageSet !== currentMessageSet) {
|
|
1178
|
-
if (limitToMaxRenderPerBatch && latestMessageSet.messages.length > limit) {
|
|
1179
|
-
currentMessageSet.messages = currentMessageSet.messages.concat(
|
|
1180
|
-
latestMessageSet.messages.slice(0, limit),
|
|
1181
|
-
);
|
|
1182
|
-
latestMessageSet.messages = latestMessageSet.messages.slice(limit);
|
|
1183
|
-
} else {
|
|
1184
|
-
channel.state.messageSets = channel.state.messageSets.filter((set) => !set.isLatest);
|
|
1185
|
-
currentMessageSet.messages = currentMessageSet.messages.concat(latestMessageSet.messages);
|
|
1186
|
-
currentMessageSet.isLatest = true;
|
|
1187
|
-
hasOverlappingRecentMessagesRef.current = false;
|
|
1188
|
-
clearInterval(mergeSetsIntervalRef.current);
|
|
1189
|
-
}
|
|
1190
|
-
return true;
|
|
1191
|
-
}
|
|
1192
|
-
}
|
|
1193
|
-
return false;
|
|
1194
|
-
});
|
|
1195
|
-
|
|
1196
|
-
const mergeSetsIntervalRef = useRef<NodeJS.Timeout>();
|
|
1197
|
-
|
|
1198
|
-
// clear the interval on unmount
|
|
1199
|
-
useEffect(
|
|
1200
|
-
() => () => {
|
|
1201
|
-
clearInterval(mergeSetsIntervalRef.current);
|
|
1202
|
-
},
|
|
1203
|
-
[],
|
|
1204
|
-
);
|
|
1205
|
-
|
|
1206
|
-
// if we had split the latest and current message set, we try to merge them back
|
|
1207
|
-
// temporarily commented out the interval as it was causing issues with jankiness during scrolling
|
|
1208
|
-
const restartSetsMergeFuncRef = useRef(() => {
|
|
1209
|
-
clearInterval(mergeSetsIntervalRef.current);
|
|
1210
|
-
if (!hasOverlappingRecentMessagesRef.current) return;
|
|
1211
|
-
// mergeSetsIntervalRef.current = setInterval(() => {
|
|
1212
|
-
// const currentLength = channel.state.messages.length || 0;
|
|
1213
|
-
// const didMerge = mergeOverlappingMessageSetsRef.current(true);
|
|
1214
|
-
// if (didMerge && channel.state.messages.length !== currentLength) {
|
|
1215
|
-
// setMessages(channel.state.messages);
|
|
1216
|
-
// }
|
|
1217
|
-
// }, 1000);
|
|
1218
|
-
});
|
|
1219
|
-
|
|
1220
|
-
/**
|
|
1221
|
-
* Shows the latest messages from the channel state
|
|
1222
|
-
* If recent messages are empty, fetches new
|
|
1223
|
-
* @param clearLatest If true, clears the latest messages before loading (useful for complete refresh)
|
|
1224
|
-
*/
|
|
1225
|
-
const loadLatestMessagesRef = useRef(async (clearLatest = false) => {
|
|
1226
|
-
mergeOverlappingMessageSetsRef.current();
|
|
1227
|
-
if (clearLatest) {
|
|
1228
|
-
const latestSet = channel.state.messageSets.find((set) => set.isLatest);
|
|
1229
|
-
if (latestSet) latestSet.messages = [];
|
|
1230
|
-
}
|
|
1231
|
-
if (channel.state.latestMessages.length === 0) {
|
|
1232
|
-
await channel.query({}, 'latest');
|
|
1233
|
-
}
|
|
1234
|
-
await channel.state.loadMessageIntoState('latest');
|
|
1235
|
-
setMessages([...channel.state.messages]);
|
|
1236
|
-
});
|
|
1237
|
-
|
|
1238
|
-
const loadChannel = () =>
|
|
1239
|
-
channelQueryCallRef.current(
|
|
1240
|
-
async () => {
|
|
1241
|
-
if (!channel?.initialized || !channel.state.isUpToDate) {
|
|
1242
|
-
await channel?.watch();
|
|
1243
|
-
} else {
|
|
1244
|
-
await channel.state.loadMessageIntoState('latest');
|
|
1245
|
-
}
|
|
1246
|
-
},
|
|
1247
|
-
() => {
|
|
1248
|
-
channel?.state.setIsUpToDate(true);
|
|
1249
|
-
setHasNoMoreRecentMessagesToLoad(true);
|
|
1250
|
-
},
|
|
1251
|
-
);
|
|
1252
|
-
|
|
1253
879
|
const reloadThread = async () => {
|
|
1254
880
|
if (!channel || !thread?.id) return;
|
|
1255
881
|
setThreadLoadingMore(true);
|
|
@@ -1285,105 +911,39 @@ const ChannelWithContext = <
|
|
|
1285
911
|
|
|
1286
912
|
const resyncChannel = async () => {
|
|
1287
913
|
if (!channel || syncingChannelRef.current) return;
|
|
1288
|
-
hasOverlappingRecentMessagesRef.current = false;
|
|
1289
|
-
clearInterval(mergeSetsIntervalRef.current);
|
|
1290
914
|
syncingChannelRef.current = true;
|
|
1291
|
-
|
|
1292
915
|
setError(false);
|
|
1293
|
-
try {
|
|
1294
|
-
/**
|
|
1295
|
-
* Allow a buffer of 30 new messages, so that MessageList won't move its scroll position,
|
|
1296
|
-
* giving smooth user experience.
|
|
1297
|
-
*/
|
|
1298
|
-
const state = await channel.watch({
|
|
1299
|
-
messages: {
|
|
1300
|
-
limit: messages.length + 30,
|
|
1301
|
-
},
|
|
1302
|
-
});
|
|
1303
|
-
|
|
1304
|
-
const oldListTopMessage = messages[0];
|
|
1305
|
-
const oldListTopMessageId = messages[0]?.id;
|
|
1306
|
-
const oldListBottomMessage = messages[messages.length - 1];
|
|
1307
916
|
|
|
1308
|
-
|
|
1309
|
-
|
|
1310
|
-
|
|
1311
|
-
|
|
1312
|
-
|
|
1313
|
-
|
|
1314
|
-
|
|
1315
|
-
!newListBottomMessage // new list is truncated
|
|
1316
|
-
) {
|
|
1317
|
-
/** Channel was truncated */
|
|
1318
|
-
channel.state.clearMessages();
|
|
1319
|
-
channel.state.setIsUpToDate(true);
|
|
1320
|
-
channel.state.addMessagesSorted(state.messages);
|
|
1321
|
-
channel.state.addPinnedMessages(state.pinned_messages);
|
|
917
|
+
const parseMessage = (message: FormatMessageResponse<StreamChatGenerics>) =>
|
|
918
|
+
({
|
|
919
|
+
...message,
|
|
920
|
+
created_at: message.created_at.toString(),
|
|
921
|
+
pinned_at: message.pinned_at?.toString(),
|
|
922
|
+
updated_at: message.updated_at?.toString(),
|
|
923
|
+
} as unknown as MessageResponse<StreamChatGenerics>);
|
|
1322
924
|
|
|
925
|
+
try {
|
|
926
|
+
if (!thread) {
|
|
1323
927
|
copyChannelState();
|
|
1324
|
-
return;
|
|
1325
|
-
}
|
|
1326
928
|
|
|
1327
|
-
|
|
1328
|
-
|
|
1329
|
-
|
|
1330
|
-
|
|
1331
|
-
|
|
1332
|
-
|
|
1333
|
-
} as unknown as MessageResponse<StreamChatGenerics>);
|
|
1334
|
-
|
|
1335
|
-
const failedMessages = messages
|
|
1336
|
-
.filter((message) => message.status === MessageStatusTypes.FAILED)
|
|
1337
|
-
.map(parseMessage);
|
|
1338
|
-
|
|
1339
|
-
const failedThreadMessages = thread
|
|
1340
|
-
? threadMessages
|
|
1341
|
-
.filter((message) => message.status === MessageStatusTypes.FAILED)
|
|
1342
|
-
.map(parseMessage)
|
|
1343
|
-
: [];
|
|
1344
|
-
|
|
1345
|
-
const oldListTopMessageCreatedAt = oldListTopMessage.created_at;
|
|
1346
|
-
const oldListBottomMessageCreatedAt = oldListBottomMessage.created_at;
|
|
1347
|
-
const newListTopMessageCreatedAt = newListTopMessage.created_at
|
|
1348
|
-
? new Date(newListTopMessage.created_at)
|
|
1349
|
-
: new Date();
|
|
1350
|
-
const newListBottomMessageCreatedAt = newListBottomMessage?.created_at
|
|
1351
|
-
? new Date(newListBottomMessage.created_at)
|
|
1352
|
-
: new Date();
|
|
1353
|
-
|
|
1354
|
-
let finalMessages = [];
|
|
1355
|
-
|
|
1356
|
-
if (
|
|
1357
|
-
oldListTopMessage &&
|
|
1358
|
-
oldListTopMessageCreatedAt &&
|
|
1359
|
-
oldListBottomMessageCreatedAt &&
|
|
1360
|
-
newListTopMessageCreatedAt < oldListTopMessageCreatedAt &&
|
|
1361
|
-
newListBottomMessageCreatedAt >= oldListBottomMessageCreatedAt
|
|
1362
|
-
) {
|
|
1363
|
-
const index = state.messages.findIndex((message) => message.id === oldListTopMessageId);
|
|
1364
|
-
finalMessages = state.messages.slice(index);
|
|
929
|
+
const failedMessages = channelMessagesState.messages
|
|
930
|
+
?.filter((message) => message.status === MessageStatusTypes.FAILED)
|
|
931
|
+
.map(parseMessage);
|
|
932
|
+
if (failedMessages?.length) {
|
|
933
|
+
channel.state.addMessagesSorted(failedMessages);
|
|
934
|
+
}
|
|
1365
935
|
} else {
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
1371
|
-
|
|
1372
|
-
|
|
1373
|
-
|
|
1374
|
-
|
|
1375
|
-
|
|
1376
|
-
|
|
1377
|
-
if (failedMessages.length) {
|
|
1378
|
-
channel.state.addMessagesSorted(failedMessages);
|
|
1379
|
-
copyChannelState();
|
|
1380
|
-
}
|
|
1381
|
-
|
|
1382
|
-
await reloadThread();
|
|
1383
|
-
|
|
1384
|
-
if (thread && failedThreadMessages.length) {
|
|
1385
|
-
channel.state.addMessagesSorted(failedThreadMessages);
|
|
1386
|
-
setThreadMessages([...channel.state.threads[thread.id]]);
|
|
936
|
+
await reloadThread();
|
|
937
|
+
|
|
938
|
+
const failedThreadMessages = thread
|
|
939
|
+
? threadMessages
|
|
940
|
+
.filter((message) => message.status === MessageStatusTypes.FAILED)
|
|
941
|
+
.map(parseMessage)
|
|
942
|
+
: [];
|
|
943
|
+
if (failedThreadMessages.length) {
|
|
944
|
+
channel.state.addMessagesSorted(failedThreadMessages);
|
|
945
|
+
setThreadMessages([...channel.state.threads[thread.id]]);
|
|
946
|
+
}
|
|
1387
947
|
}
|
|
1388
948
|
} catch (err) {
|
|
1389
949
|
if (err instanceof Error) {
|
|
@@ -1391,7 +951,6 @@ const ChannelWithContext = <
|
|
|
1391
951
|
} else {
|
|
1392
952
|
setError(true);
|
|
1393
953
|
}
|
|
1394
|
-
setLoading(false);
|
|
1395
954
|
}
|
|
1396
955
|
|
|
1397
956
|
syncingChannelRef.current = false;
|
|
@@ -1412,7 +971,7 @@ const ChannelWithContext = <
|
|
|
1412
971
|
if (enableOfflineSupport) {
|
|
1413
972
|
connectionChangedSubscription = DBSyncManager.onSyncStatusChange((statusChanged) => {
|
|
1414
973
|
if (statusChanged) {
|
|
1415
|
-
|
|
974
|
+
copyChannelState();
|
|
1416
975
|
}
|
|
1417
976
|
});
|
|
1418
977
|
} else {
|
|
@@ -1428,108 +987,6 @@ const ChannelWithContext = <
|
|
|
1428
987
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1429
988
|
}, [enableOfflineSupport, shouldSyncChannel]);
|
|
1430
989
|
|
|
1431
|
-
const reloadChannel = () =>
|
|
1432
|
-
channelQueryCallRef.current(
|
|
1433
|
-
async () => {
|
|
1434
|
-
setLoading(true);
|
|
1435
|
-
await loadLatestMessagesRef.current(true);
|
|
1436
|
-
setLoading(false);
|
|
1437
|
-
},
|
|
1438
|
-
() => {
|
|
1439
|
-
channel?.state.setIsUpToDate(true);
|
|
1440
|
-
setHasNoMoreRecentMessagesToLoad(true);
|
|
1441
|
-
},
|
|
1442
|
-
);
|
|
1443
|
-
|
|
1444
|
-
/**
|
|
1445
|
-
* @deprecated
|
|
1446
|
-
* Makes a query to load messages at particular message id.
|
|
1447
|
-
*
|
|
1448
|
-
* @param messageId Targeted message id
|
|
1449
|
-
* @param before Number of messages to load before messageId
|
|
1450
|
-
* @param after Number of messages to load after messageId
|
|
1451
|
-
*/
|
|
1452
|
-
const queryAtMessage = async ({
|
|
1453
|
-
after = 10,
|
|
1454
|
-
before = 10,
|
|
1455
|
-
messageId,
|
|
1456
|
-
}: Parameters<ChannelContextValue<StreamChatGenerics>['loadChannelAtMessage']>[0]) => {
|
|
1457
|
-
if (!channel) return;
|
|
1458
|
-
channel.state.setIsUpToDate(false);
|
|
1459
|
-
hasOverlappingRecentMessagesRef.current = false;
|
|
1460
|
-
clearInterval(mergeSetsIntervalRef.current);
|
|
1461
|
-
channel.state.clearMessages();
|
|
1462
|
-
setMessages([]);
|
|
1463
|
-
if (!messageId) {
|
|
1464
|
-
await channel.query({
|
|
1465
|
-
messages: {
|
|
1466
|
-
limit: before,
|
|
1467
|
-
},
|
|
1468
|
-
watch: true,
|
|
1469
|
-
});
|
|
1470
|
-
|
|
1471
|
-
channel.state.setIsUpToDate(true);
|
|
1472
|
-
return;
|
|
1473
|
-
}
|
|
1474
|
-
|
|
1475
|
-
await queryBeforeMessage(messageId, before);
|
|
1476
|
-
await queryAfterMessage(messageId, after);
|
|
1477
|
-
};
|
|
1478
|
-
|
|
1479
|
-
/**
|
|
1480
|
-
* @deprecated
|
|
1481
|
-
* Makes a query to load messages before particular message id.
|
|
1482
|
-
*
|
|
1483
|
-
* @param messageId Targeted message id
|
|
1484
|
-
* @param limit Number of messages to load
|
|
1485
|
-
*/
|
|
1486
|
-
const queryBeforeMessage = async (messageId: string, limit = 5) => {
|
|
1487
|
-
if (!channel) return;
|
|
1488
|
-
|
|
1489
|
-
await channel.query({
|
|
1490
|
-
messages: {
|
|
1491
|
-
id_lt: messageId,
|
|
1492
|
-
limit,
|
|
1493
|
-
},
|
|
1494
|
-
watch: true,
|
|
1495
|
-
});
|
|
1496
|
-
|
|
1497
|
-
channel.state.setIsUpToDate(false);
|
|
1498
|
-
};
|
|
1499
|
-
|
|
1500
|
-
/**
|
|
1501
|
-
* @deprecated
|
|
1502
|
-
* Makes a query to load messages later than particular message id.
|
|
1503
|
-
*
|
|
1504
|
-
* @param messageId Targeted message id
|
|
1505
|
-
* @param limit Number of messages to load.
|
|
1506
|
-
*/
|
|
1507
|
-
const queryAfterMessage = async (messageId: string, limit = 5) => {
|
|
1508
|
-
if (!channel) return;
|
|
1509
|
-
const state = await channel.query({
|
|
1510
|
-
messages: {
|
|
1511
|
-
id_gte: messageId,
|
|
1512
|
-
limit,
|
|
1513
|
-
},
|
|
1514
|
-
watch: true,
|
|
1515
|
-
});
|
|
1516
|
-
|
|
1517
|
-
if (state.messages.length < limit) {
|
|
1518
|
-
// make current set as the latest
|
|
1519
|
-
const currentSet = channel.state.messageSets.find((set) => set.isCurrent);
|
|
1520
|
-
if (currentSet && !currentSet.isLatest) {
|
|
1521
|
-
channel.state.messageSets = channel.state.messageSets.filter((set) => !set.isLatest);
|
|
1522
|
-
currentSet.isLatest = true;
|
|
1523
|
-
}
|
|
1524
|
-
channel.state.setIsUpToDate(true);
|
|
1525
|
-
setHasNoMoreRecentMessagesToLoad(true);
|
|
1526
|
-
} else {
|
|
1527
|
-
splitLatestCurrentMessageSetRef.current();
|
|
1528
|
-
channel.state.setIsUpToDate(false);
|
|
1529
|
-
setHasNoMoreRecentMessagesToLoad(false);
|
|
1530
|
-
}
|
|
1531
|
-
};
|
|
1532
|
-
|
|
1533
990
|
// In case the channel is disconnected which may happen when channel is deleted,
|
|
1534
991
|
// underlying js client throws an error. Following function ensures that Channel component
|
|
1535
992
|
// won't result in error in such a case.
|
|
@@ -1548,22 +1005,61 @@ const ChannelWithContext = <
|
|
|
1548
1005
|
*/
|
|
1549
1006
|
const clientChannelConfig = getChannelConfigSafely();
|
|
1550
1007
|
|
|
1008
|
+
const reloadChannel = async () => {
|
|
1009
|
+
try {
|
|
1010
|
+
await loadLatestMessages();
|
|
1011
|
+
} catch (err) {
|
|
1012
|
+
console.warn('Reloading channel failed with error:', err);
|
|
1013
|
+
}
|
|
1014
|
+
};
|
|
1015
|
+
|
|
1016
|
+
const loadChannelAroundMessage: ChannelContextValue<StreamChatGenerics>['loadChannelAroundMessage'] =
|
|
1017
|
+
async ({ messageId: messageIdToLoadAround }): Promise<void> => {
|
|
1018
|
+
if (!messageIdToLoadAround) return;
|
|
1019
|
+
try {
|
|
1020
|
+
if (thread) {
|
|
1021
|
+
setThreadLoadingMore(true);
|
|
1022
|
+
try {
|
|
1023
|
+
await channel.state.loadMessageIntoState(messageIdToLoadAround, thread.id);
|
|
1024
|
+
setThreadLoadingMore(false);
|
|
1025
|
+
setThreadMessages(channel.state.threads[thread.id]);
|
|
1026
|
+
if (setTargetedMessage) {
|
|
1027
|
+
setTargetedMessage(messageIdToLoadAround);
|
|
1028
|
+
}
|
|
1029
|
+
} catch (err) {
|
|
1030
|
+
if (err instanceof Error) {
|
|
1031
|
+
setError(err);
|
|
1032
|
+
} else {
|
|
1033
|
+
setError(true);
|
|
1034
|
+
}
|
|
1035
|
+
setThreadLoadingMore(false);
|
|
1036
|
+
}
|
|
1037
|
+
} else {
|
|
1038
|
+
await loadChannelAroundMessageFn({
|
|
1039
|
+
messageId: messageIdToLoadAround,
|
|
1040
|
+
setTargetedMessage,
|
|
1041
|
+
});
|
|
1042
|
+
}
|
|
1043
|
+
} catch (err) {
|
|
1044
|
+
console.warn('Loading channel around message failed with error:', err);
|
|
1045
|
+
}
|
|
1046
|
+
};
|
|
1047
|
+
|
|
1551
1048
|
/**
|
|
1552
1049
|
* MESSAGE METHODS
|
|
1553
1050
|
*/
|
|
1554
|
-
|
|
1555
1051
|
const updateMessage: MessagesContextValue<StreamChatGenerics>['updateMessage'] = (
|
|
1556
1052
|
updatedMessage,
|
|
1557
1053
|
extraState = {},
|
|
1558
1054
|
) => {
|
|
1559
|
-
if (channel)
|
|
1560
|
-
|
|
1561
|
-
|
|
1562
|
-
|
|
1563
|
-
setThreadMessages(extraState.threadMessages);
|
|
1564
|
-
}
|
|
1055
|
+
if (!channel) return;
|
|
1056
|
+
|
|
1057
|
+
channel.state.addMessageSorted(updatedMessage, true);
|
|
1058
|
+
copyMessagesStateFromChannel(channel);
|
|
1565
1059
|
|
|
1566
|
-
|
|
1060
|
+
if (thread && updatedMessage.parent_id) {
|
|
1061
|
+
extraState.threadMessages = channel.state.threads[updatedMessage.parent_id] || [];
|
|
1062
|
+
setThreadMessages(extraState.threadMessages);
|
|
1567
1063
|
}
|
|
1568
1064
|
};
|
|
1569
1065
|
|
|
@@ -1574,11 +1070,12 @@ const ChannelWithContext = <
|
|
|
1574
1070
|
if (channel) {
|
|
1575
1071
|
channel.state.removeMessage(oldMessage);
|
|
1576
1072
|
channel.state.addMessageSorted(newMessage, true);
|
|
1073
|
+
copyMessagesStateFromChannel(channel);
|
|
1074
|
+
|
|
1577
1075
|
if (thread && newMessage.parent_id) {
|
|
1578
1076
|
const threadMessages = channel.state.threads[newMessage.parent_id] || [];
|
|
1579
1077
|
setThreadMessages(threadMessages);
|
|
1580
1078
|
}
|
|
1581
|
-
setMessages(channel.state.messages);
|
|
1582
1079
|
}
|
|
1583
1080
|
};
|
|
1584
1081
|
|
|
@@ -1628,7 +1125,9 @@ const ChannelWithContext = <
|
|
|
1628
1125
|
* as quoted_message is a reserved field.
|
|
1629
1126
|
*/
|
|
1630
1127
|
if (preview.quoted_message_id) {
|
|
1631
|
-
const quotedMessage = messages
|
|
1128
|
+
const quotedMessage = channelMessagesState.messages?.find(
|
|
1129
|
+
(message) => message.id === preview.quoted_message_id,
|
|
1130
|
+
);
|
|
1632
1131
|
|
|
1633
1132
|
preview.quoted_message =
|
|
1634
1133
|
quotedMessage as MessageResponse<StreamChatGenerics>['quoted_message'];
|
|
@@ -1667,7 +1166,7 @@ const ChannelWithContext = <
|
|
|
1667
1166
|
attachment.image_url = uploadResponse.file;
|
|
1668
1167
|
delete attachment.originalFile;
|
|
1669
1168
|
|
|
1670
|
-
dbApi.updateMessage({
|
|
1169
|
+
await dbApi.updateMessage({
|
|
1671
1170
|
message: { ...updatedMessage, cid: channel.cid },
|
|
1672
1171
|
});
|
|
1673
1172
|
}
|
|
@@ -1696,7 +1195,7 @@ const ChannelWithContext = <
|
|
|
1696
1195
|
}
|
|
1697
1196
|
|
|
1698
1197
|
delete attachment.originalFile;
|
|
1699
|
-
dbApi.updateMessage({
|
|
1198
|
+
await dbApi.updateMessage({
|
|
1700
1199
|
message: { ...updatedMessage, cid: channel.cid },
|
|
1701
1200
|
});
|
|
1702
1201
|
}
|
|
@@ -1758,7 +1257,7 @@ const ChannelWithContext = <
|
|
|
1758
1257
|
messageResponse.message.status = MessageStatusTypes.RECEIVED;
|
|
1759
1258
|
|
|
1760
1259
|
if (enableOfflineSupport) {
|
|
1761
|
-
dbApi.updateMessage({
|
|
1260
|
+
await dbApi.updateMessage({
|
|
1762
1261
|
message: { ...messageResponse.message, cid: channel.cid },
|
|
1763
1262
|
});
|
|
1764
1263
|
}
|
|
@@ -1778,7 +1277,7 @@ const ChannelWithContext = <
|
|
|
1778
1277
|
threadInstance?.upsertReplyLocally?.({ message: updatedMessage });
|
|
1779
1278
|
|
|
1780
1279
|
if (enableOfflineSupport) {
|
|
1781
|
-
dbApi.updateMessage({
|
|
1280
|
+
await dbApi.updateMessage({
|
|
1782
1281
|
message: { ...message, cid: channel.cid },
|
|
1783
1282
|
});
|
|
1784
1283
|
}
|
|
@@ -1797,8 +1296,6 @@ const ChannelWithContext = <
|
|
|
1797
1296
|
attachments: message.attachments || [],
|
|
1798
1297
|
});
|
|
1799
1298
|
|
|
1800
|
-
mergeOverlappingMessageSetsRef.current();
|
|
1801
|
-
|
|
1802
1299
|
updateMessage(messagePreview, {
|
|
1803
1300
|
commands: [],
|
|
1804
1301
|
messageInput: '',
|
|
@@ -1810,7 +1307,7 @@ const ChannelWithContext = <
|
|
|
1810
1307
|
// if app gets closed before message gets sent and next time user opens the app
|
|
1811
1308
|
// then user can see that message in failed state and can retry.
|
|
1812
1309
|
// If succesfull, it will be updated with received status.
|
|
1813
|
-
dbApi.upsertMessages({
|
|
1310
|
+
await dbApi.upsertMessages({
|
|
1814
1311
|
messages: [{ ...messagePreview, cid: channel.cid, status: MessageStatusTypes.FAILED }],
|
|
1815
1312
|
});
|
|
1816
1313
|
}
|
|
@@ -1839,161 +1336,6 @@ const ChannelWithContext = <
|
|
|
1839
1336
|
);
|
|
1840
1337
|
};
|
|
1841
1338
|
|
|
1842
|
-
// hard limit to prevent you from scrolling faster than 1 page per 2 seconds
|
|
1843
|
-
const loadMoreFinished = useRef(
|
|
1844
|
-
debounce(
|
|
1845
|
-
(updatedHasMore: boolean, newMessages: ChannelState<StreamChatGenerics>['messages']) => {
|
|
1846
|
-
setLoading(false);
|
|
1847
|
-
setLoadingMore(false);
|
|
1848
|
-
setError(false);
|
|
1849
|
-
setHasMore(updatedHasMore);
|
|
1850
|
-
setMessages(newMessages);
|
|
1851
|
-
},
|
|
1852
|
-
defaultDebounceInterval,
|
|
1853
|
-
debounceOptions,
|
|
1854
|
-
),
|
|
1855
|
-
).current;
|
|
1856
|
-
|
|
1857
|
-
/**
|
|
1858
|
-
* This function loads more messages before the first message in current channel state.
|
|
1859
|
-
*/
|
|
1860
|
-
const loadMore = useCallback<PaginatedMessageListContextValue<StreamChatGenerics>['loadMore']>(
|
|
1861
|
-
async (limit = 20) => {
|
|
1862
|
-
if (loadingMore || hasMore === false) {
|
|
1863
|
-
return;
|
|
1864
|
-
}
|
|
1865
|
-
|
|
1866
|
-
const currentMessages = channel.state.messages;
|
|
1867
|
-
|
|
1868
|
-
if (!currentMessages.length) {
|
|
1869
|
-
return setLoadingMore(false);
|
|
1870
|
-
}
|
|
1871
|
-
|
|
1872
|
-
const oldestMessage = currentMessages && currentMessages[0];
|
|
1873
|
-
|
|
1874
|
-
if (oldestMessage && oldestMessage.status !== MessageStatusTypes.RECEIVED) {
|
|
1875
|
-
return setLoadingMore(false);
|
|
1876
|
-
}
|
|
1877
|
-
|
|
1878
|
-
setLoadingMore(true);
|
|
1879
|
-
|
|
1880
|
-
const oldestID = oldestMessage && oldestMessage.id;
|
|
1881
|
-
|
|
1882
|
-
try {
|
|
1883
|
-
if (channel) {
|
|
1884
|
-
const queryResponse = await channel.query({
|
|
1885
|
-
messages: { id_lt: oldestID, limit },
|
|
1886
|
-
});
|
|
1887
|
-
|
|
1888
|
-
const updatedHasMore = queryResponse.messages.length === limit;
|
|
1889
|
-
loadMoreFinished(updatedHasMore, channel.state.messages);
|
|
1890
|
-
}
|
|
1891
|
-
} catch (err) {
|
|
1892
|
-
if (err instanceof Error) {
|
|
1893
|
-
setError(err);
|
|
1894
|
-
} else {
|
|
1895
|
-
setError(true);
|
|
1896
|
-
}
|
|
1897
|
-
setLoadingMore(false);
|
|
1898
|
-
throw err;
|
|
1899
|
-
}
|
|
1900
|
-
},
|
|
1901
|
-
/*
|
|
1902
|
-
* This function is passed to useCreatePaginatedMessageListContext
|
|
1903
|
-
* Where the deps are [channelId, hasMore, loadingMoreRecent, loadingMore]
|
|
1904
|
-
* and only those deps should be used here because of that
|
|
1905
|
-
*/
|
|
1906
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1907
|
-
[channelId, hasMore, loadingMore],
|
|
1908
|
-
);
|
|
1909
|
-
|
|
1910
|
-
/**
|
|
1911
|
-
* This function loads more messages after the most recent message in current channel state.
|
|
1912
|
-
*/
|
|
1913
|
-
const loadMoreRecent = useCallback<
|
|
1914
|
-
PaginatedMessageListContextValue<StreamChatGenerics>['loadMoreRecent']
|
|
1915
|
-
>(
|
|
1916
|
-
async (limit = 5) => {
|
|
1917
|
-
const latestMessageSet = channel.state.messageSets.find((set) => set.isLatest);
|
|
1918
|
-
const latestLengthBeforeMerge = latestMessageSet?.messages.length || 0;
|
|
1919
|
-
const didMerge = mergeOverlappingMessageSetsRef.current(true);
|
|
1920
|
-
if (didMerge) {
|
|
1921
|
-
if (latestMessageSet && latestLengthBeforeMerge > 0) {
|
|
1922
|
-
const shouldSetStateUpToDate =
|
|
1923
|
-
latestMessageSet.messages.length < limit && latestMessageSet.isCurrent;
|
|
1924
|
-
setLoadingMoreRecent(true);
|
|
1925
|
-
channel.state.setIsUpToDate(shouldSetStateUpToDate);
|
|
1926
|
-
setHasNoMoreRecentMessagesToLoad(shouldSetStateUpToDate);
|
|
1927
|
-
loadMoreRecentFinished(channel.state.messages);
|
|
1928
|
-
restartSetsMergeFuncRef.current();
|
|
1929
|
-
return;
|
|
1930
|
-
}
|
|
1931
|
-
}
|
|
1932
|
-
if (channel.state.isUpToDate) {
|
|
1933
|
-
setLoadingMoreRecent(false);
|
|
1934
|
-
return;
|
|
1935
|
-
}
|
|
1936
|
-
const currentMessages = channel.state.messages;
|
|
1937
|
-
const recentMessage = currentMessages[currentMessages.length - 1];
|
|
1938
|
-
|
|
1939
|
-
if (recentMessage?.status !== MessageStatusTypes.RECEIVED) {
|
|
1940
|
-
setLoadingMoreRecent(false);
|
|
1941
|
-
return;
|
|
1942
|
-
}
|
|
1943
|
-
setLoadingMoreRecent(true);
|
|
1944
|
-
try {
|
|
1945
|
-
if (channel) {
|
|
1946
|
-
const queryResponse = await channel.query({
|
|
1947
|
-
messages: {
|
|
1948
|
-
id_gte: recentMessage.id,
|
|
1949
|
-
limit,
|
|
1950
|
-
},
|
|
1951
|
-
watch: true,
|
|
1952
|
-
});
|
|
1953
|
-
const gotAllRecentMessages = queryResponse.messages.length < limit;
|
|
1954
|
-
const currentSet = channel.state.messageSets.find((set) => set.isCurrent);
|
|
1955
|
-
if (gotAllRecentMessages && currentSet && !currentSet.isLatest) {
|
|
1956
|
-
channel.state.messageSets = channel.state.messageSets.filter((set) => !set.isLatest);
|
|
1957
|
-
// make current set as the latest
|
|
1958
|
-
currentSet.isLatest = true;
|
|
1959
|
-
}
|
|
1960
|
-
channel.state.setIsUpToDate(gotAllRecentMessages);
|
|
1961
|
-
setHasNoMoreRecentMessagesToLoad(gotAllRecentMessages);
|
|
1962
|
-
loadMoreRecentFinished(channel.state.messages);
|
|
1963
|
-
}
|
|
1964
|
-
} catch (err) {
|
|
1965
|
-
console.warn('Message pagination request failed with error', err);
|
|
1966
|
-
if (err instanceof Error) {
|
|
1967
|
-
setError(err);
|
|
1968
|
-
} else {
|
|
1969
|
-
setError(true);
|
|
1970
|
-
}
|
|
1971
|
-
setLoadingMoreRecent(false);
|
|
1972
|
-
throw err;
|
|
1973
|
-
}
|
|
1974
|
-
},
|
|
1975
|
-
/*
|
|
1976
|
-
* This function is passed to useCreatePaginatedMessageListContext
|
|
1977
|
-
* Where the deps are [channelId, hasMore, loadingMoreRecent, loadingMore, hasNoMoreRecentMessagesToLoad]
|
|
1978
|
-
* and and only those deps should be used here because of that
|
|
1979
|
-
*/
|
|
1980
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
1981
|
-
[channelId, hasNoMoreRecentMessagesToLoad],
|
|
1982
|
-
);
|
|
1983
|
-
|
|
1984
|
-
// hard limit to prevent you from scrolling faster than 1 page per 2 seconds
|
|
1985
|
-
const loadMoreRecentFinished = useRef(
|
|
1986
|
-
debounce(
|
|
1987
|
-
(newMessages: ChannelState<StreamChatGenerics>['messages']) => {
|
|
1988
|
-
setLoadingMoreRecent(false);
|
|
1989
|
-
setMessages(newMessages);
|
|
1990
|
-
setError(false);
|
|
1991
|
-
},
|
|
1992
|
-
defaultDebounceInterval,
|
|
1993
|
-
debounceOptions,
|
|
1994
|
-
),
|
|
1995
|
-
).current;
|
|
1996
|
-
|
|
1997
1339
|
const editMessage: InputMessageInputContextValue<StreamChatGenerics>['editMessage'] = (
|
|
1998
1340
|
updatedMessage,
|
|
1999
1341
|
) =>
|
|
@@ -2018,22 +1360,25 @@ const ChannelWithContext = <
|
|
|
2018
1360
|
() => setEditing(undefined);
|
|
2019
1361
|
|
|
2020
1362
|
const clearQuotedMessageState: InputMessageInputContextValue<StreamChatGenerics>['clearQuotedMessageState'] =
|
|
2021
|
-
() => setQuotedMessage(
|
|
1363
|
+
() => setQuotedMessage(undefined);
|
|
2022
1364
|
|
|
2023
1365
|
/**
|
|
2024
1366
|
* Removes the message from local state
|
|
2025
1367
|
*/
|
|
2026
|
-
const removeMessage: MessagesContextValue<StreamChatGenerics>['removeMessage'] = (
|
|
1368
|
+
const removeMessage: MessagesContextValue<StreamChatGenerics>['removeMessage'] = async (
|
|
1369
|
+
message,
|
|
1370
|
+
) => {
|
|
2027
1371
|
if (channel) {
|
|
2028
1372
|
channel.state.removeMessage(message);
|
|
2029
|
-
|
|
1373
|
+
copyMessagesStateFromChannel(channel);
|
|
1374
|
+
|
|
2030
1375
|
if (thread) {
|
|
2031
1376
|
setThreadMessages(channel.state.threads[thread.id] || []);
|
|
2032
1377
|
}
|
|
2033
1378
|
}
|
|
2034
1379
|
|
|
2035
1380
|
if (enableOfflineSupport) {
|
|
2036
|
-
dbApi.deleteMessage({
|
|
1381
|
+
await dbApi.deleteMessage({
|
|
2037
1382
|
id: message.id,
|
|
2038
1383
|
});
|
|
2039
1384
|
}
|
|
@@ -2065,7 +1410,7 @@ const ChannelWithContext = <
|
|
|
2065
1410
|
user: client.user,
|
|
2066
1411
|
});
|
|
2067
1412
|
|
|
2068
|
-
|
|
1413
|
+
copyMessagesStateFromChannel(channel);
|
|
2069
1414
|
|
|
2070
1415
|
const sendReactionResponse = await DBSyncManager.queueTask<StreamChatGenerics>({
|
|
2071
1416
|
client,
|
|
@@ -2091,7 +1436,7 @@ const ChannelWithContext = <
|
|
|
2091
1436
|
|
|
2092
1437
|
if (!enableOfflineSupport) {
|
|
2093
1438
|
if (message.status === MessageStatusTypes.FAILED) {
|
|
2094
|
-
removeMessage(message);
|
|
1439
|
+
await removeMessage(message);
|
|
2095
1440
|
return;
|
|
2096
1441
|
}
|
|
2097
1442
|
await client.deleteMessage(message.id);
|
|
@@ -2099,8 +1444,8 @@ const ChannelWithContext = <
|
|
|
2099
1444
|
}
|
|
2100
1445
|
|
|
2101
1446
|
if (message.status === MessageStatusTypes.FAILED) {
|
|
2102
|
-
DBSyncManager.dropPendingTasks({ messageId: message.id });
|
|
2103
|
-
removeMessage(message);
|
|
1447
|
+
await DBSyncManager.dropPendingTasks({ messageId: message.id });
|
|
1448
|
+
await removeMessage(message);
|
|
2104
1449
|
} else {
|
|
2105
1450
|
const updatedMessage = {
|
|
2106
1451
|
...message,
|
|
@@ -2151,7 +1496,7 @@ const ChannelWithContext = <
|
|
|
2151
1496
|
user: client.user,
|
|
2152
1497
|
});
|
|
2153
1498
|
|
|
2154
|
-
|
|
1499
|
+
copyMessagesStateFromChannel(channel);
|
|
2155
1500
|
|
|
2156
1501
|
await DBSyncManager.queueTask<StreamChatGenerics>({
|
|
2157
1502
|
client,
|
|
@@ -2246,11 +1591,6 @@ const ChannelWithContext = <
|
|
|
2246
1591
|
}
|
|
2247
1592
|
};
|
|
2248
1593
|
|
|
2249
|
-
const disabledValue = useMemo(
|
|
2250
|
-
() => !!channel?.data?.frozen && disableIfFrozenChannel,
|
|
2251
|
-
[channel.data?.frozen, disableIfFrozenChannel],
|
|
2252
|
-
);
|
|
2253
|
-
|
|
2254
1594
|
const ownCapabilitiesContext = useCreateOwnCapabilitiesContext({
|
|
2255
1595
|
channel,
|
|
2256
1596
|
overrideCapabilities: overrideOwnCapabilities,
|
|
@@ -2258,7 +1598,7 @@ const ChannelWithContext = <
|
|
|
2258
1598
|
|
|
2259
1599
|
const channelContext = useCreateChannelContext({
|
|
2260
1600
|
channel,
|
|
2261
|
-
disabled:
|
|
1601
|
+
disabled: !!channel?.data?.frozen,
|
|
2262
1602
|
EmptyStateIndicator,
|
|
2263
1603
|
enableMessageGroupingByUser,
|
|
2264
1604
|
enforceUniqueReaction,
|
|
@@ -2268,20 +1608,16 @@ const ChannelWithContext = <
|
|
|
2268
1608
|
!!(clientChannelConfig?.commands || [])?.some((command) => command.name === 'giphy'),
|
|
2269
1609
|
hideDateSeparators,
|
|
2270
1610
|
hideStickyDateHeader,
|
|
2271
|
-
isAdmin,
|
|
2272
1611
|
isChannelActive: shouldSyncChannel,
|
|
2273
|
-
isModerator,
|
|
2274
|
-
isOwner,
|
|
2275
1612
|
lastRead,
|
|
2276
1613
|
loadChannelAroundMessage,
|
|
2277
|
-
|
|
2278
|
-
loading,
|
|
1614
|
+
loading: channelMessagesState.loading,
|
|
2279
1615
|
LoadingIndicator,
|
|
2280
1616
|
markRead,
|
|
2281
1617
|
maxTimeBetweenGroupedMessages,
|
|
2282
|
-
members,
|
|
1618
|
+
members: channelState.members ?? {},
|
|
2283
1619
|
NetworkDownIndicator,
|
|
2284
|
-
read,
|
|
1620
|
+
read: channelState.read ?? {},
|
|
2285
1621
|
reloadChannel,
|
|
2286
1622
|
scrollToFirstUnreadThreshold,
|
|
2287
1623
|
setLastRead,
|
|
@@ -2290,8 +1626,8 @@ const ChannelWithContext = <
|
|
|
2290
1626
|
targetedMessage,
|
|
2291
1627
|
threadList,
|
|
2292
1628
|
uploadAbortControllerRef,
|
|
2293
|
-
watcherCount,
|
|
2294
|
-
watchers,
|
|
1629
|
+
watcherCount: channelState.watcherCount,
|
|
1630
|
+
watchers: channelState.watchers,
|
|
2295
1631
|
});
|
|
2296
1632
|
|
|
2297
1633
|
// This is mainly a hack to get around an issue with sendMessage not being passed correctly as a
|
|
@@ -2369,20 +1705,20 @@ const ChannelWithContext = <
|
|
|
2369
1705
|
|
|
2370
1706
|
const messageListContext = useCreatePaginatedMessageListContext({
|
|
2371
1707
|
channelId,
|
|
2372
|
-
hasMore,
|
|
2373
|
-
|
|
2374
|
-
loadingMore: loadingMoreProp !== undefined ? loadingMoreProp : loadingMore,
|
|
1708
|
+
hasMore: channelMessagesState.hasMore,
|
|
1709
|
+
loadingMore: loadingMoreProp !== undefined ? loadingMoreProp : channelMessagesState.loadingMore,
|
|
2375
1710
|
loadingMoreRecent:
|
|
2376
|
-
loadingMoreRecentProp !== undefined
|
|
1711
|
+
loadingMoreRecentProp !== undefined
|
|
1712
|
+
? loadingMoreRecentProp
|
|
1713
|
+
: channelMessagesState.loadingMoreRecent,
|
|
1714
|
+
loadLatestMessages,
|
|
2377
1715
|
loadMore,
|
|
2378
1716
|
loadMoreRecent,
|
|
2379
|
-
messages,
|
|
2380
|
-
setLoadingMore,
|
|
2381
|
-
setLoadingMoreRecent,
|
|
1717
|
+
messages: channelMessagesState.messages ?? [],
|
|
2382
1718
|
});
|
|
2383
1719
|
|
|
2384
1720
|
const messagesContext = useCreateMessagesContext({
|
|
2385
|
-
|
|
1721
|
+
additionalPressableProps,
|
|
2386
1722
|
Attachment,
|
|
2387
1723
|
AttachmentActions,
|
|
2388
1724
|
AudioAttachment,
|
|
@@ -2408,7 +1744,6 @@ const ChannelWithContext = <
|
|
|
2408
1744
|
Giphy,
|
|
2409
1745
|
giphyVersion,
|
|
2410
1746
|
handleBan,
|
|
2411
|
-
handleBlock,
|
|
2412
1747
|
handleCopy,
|
|
2413
1748
|
handleDelete,
|
|
2414
1749
|
handleEdit,
|
|
@@ -2431,6 +1766,8 @@ const ChannelWithContext = <
|
|
|
2431
1766
|
legacyImageViewerSwipeBehaviour,
|
|
2432
1767
|
markdownRules,
|
|
2433
1768
|
Message,
|
|
1769
|
+
MessageActionList,
|
|
1770
|
+
MessageActionListItem,
|
|
2434
1771
|
messageActions,
|
|
2435
1772
|
MessageAvatar,
|
|
2436
1773
|
MessageBounce,
|
|
@@ -2442,21 +1779,28 @@ const ChannelWithContext = <
|
|
|
2442
1779
|
MessageFooter,
|
|
2443
1780
|
MessageHeader,
|
|
2444
1781
|
MessageList,
|
|
1782
|
+
MessageMenu,
|
|
2445
1783
|
MessagePinnedHeader,
|
|
1784
|
+
MessageReactionPicker,
|
|
2446
1785
|
MessageReplies,
|
|
2447
1786
|
MessageRepliesAvatars,
|
|
2448
1787
|
MessageSimple,
|
|
2449
1788
|
MessageStatus,
|
|
2450
1789
|
MessageSystem,
|
|
2451
1790
|
MessageText,
|
|
1791
|
+
messageTextNumberOfLines,
|
|
2452
1792
|
MessageTimestamp,
|
|
1793
|
+
MessageUserReactions,
|
|
1794
|
+
MessageUserReactionsAvatar,
|
|
1795
|
+
MessageUserReactionsItem,
|
|
2453
1796
|
myMessageTheme,
|
|
2454
1797
|
onLongPressMessage,
|
|
2455
1798
|
onPressInMessage,
|
|
2456
1799
|
onPressMessage,
|
|
2457
|
-
OverlayReactionList,
|
|
2458
1800
|
PollContent,
|
|
2459
|
-
|
|
1801
|
+
ReactionListBottom,
|
|
1802
|
+
reactionListPosition,
|
|
1803
|
+
ReactionListTop,
|
|
2460
1804
|
removeMessage,
|
|
2461
1805
|
Reply,
|
|
2462
1806
|
retrySendMessage,
|
|
@@ -2497,13 +1841,13 @@ const ChannelWithContext = <
|
|
|
2497
1841
|
});
|
|
2498
1842
|
|
|
2499
1843
|
const typingContext = useCreateTypingContext({
|
|
2500
|
-
typing,
|
|
1844
|
+
typing: channelState.typing ?? {},
|
|
2501
1845
|
});
|
|
2502
1846
|
|
|
2503
1847
|
// TODO: replace the null view with appropriate message. Currently this is waiting a design decision.
|
|
2504
1848
|
if (deleted) return null;
|
|
2505
1849
|
|
|
2506
|
-
if (!channel || (error && messages
|
|
1850
|
+
if (!channel || (error && channelMessagesState.messages?.length === 0)) {
|
|
2507
1851
|
return <LoadingErrorIndicator error={error} listType='message' retry={reloadChannel} />;
|
|
2508
1852
|
}
|
|
2509
1853
|
|
|
@@ -2580,22 +1924,7 @@ export const Channel = <
|
|
|
2580
1924
|
|
|
2581
1925
|
const shouldSyncChannel = threadMessage?.id ? !!props.threadList : true;
|
|
2582
1926
|
|
|
2583
|
-
const {
|
|
2584
|
-
members,
|
|
2585
|
-
messages,
|
|
2586
|
-
read,
|
|
2587
|
-
setMembers,
|
|
2588
|
-
setMessages,
|
|
2589
|
-
setRead,
|
|
2590
|
-
setThreadMessages,
|
|
2591
|
-
setTyping,
|
|
2592
|
-
setWatcherCount,
|
|
2593
|
-
setWatchers,
|
|
2594
|
-
threadMessages,
|
|
2595
|
-
typing,
|
|
2596
|
-
watcherCount,
|
|
2597
|
-
watchers,
|
|
2598
|
-
} = useChannelState<StreamChatGenerics>(
|
|
1927
|
+
const { setThreadMessages, threadMessages } = useChannelState<StreamChatGenerics>(
|
|
2599
1928
|
props.channel,
|
|
2600
1929
|
props.threadList ? threadMessage?.id : undefined,
|
|
2601
1930
|
);
|
|
@@ -2611,21 +1940,9 @@ export const Channel = <
|
|
|
2611
1940
|
shouldSyncChannel={shouldSyncChannel}
|
|
2612
1941
|
{...{
|
|
2613
1942
|
isMessageAIGenerated,
|
|
2614
|
-
members,
|
|
2615
|
-
messages: props.messages || messages,
|
|
2616
|
-
read,
|
|
2617
|
-
setMembers,
|
|
2618
|
-
setMessages,
|
|
2619
|
-
setRead,
|
|
2620
1943
|
setThreadMessages,
|
|
2621
|
-
setTyping,
|
|
2622
|
-
setWatcherCount,
|
|
2623
|
-
setWatchers,
|
|
2624
1944
|
thread,
|
|
2625
1945
|
threadMessages,
|
|
2626
|
-
typing,
|
|
2627
|
-
watcherCount,
|
|
2628
|
-
watchers,
|
|
2629
1946
|
}}
|
|
2630
1947
|
/>
|
|
2631
1948
|
);
|