stream-chat-react 12.13.1 → 13.0.0-rc.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 +27 -30
- package/dist/components/AIStateIndicator/AIStateIndicator.d.ts +4 -5
- package/dist/components/AIStateIndicator/hooks/useAIState.d.ts +2 -3
- package/dist/components/Attachment/Attachment.d.ts +8 -9
- package/dist/components/Attachment/Attachment.js +6 -5
- package/dist/components/Attachment/AttachmentActions.d.ts +2 -3
- package/dist/components/Attachment/AttachmentContainer.d.ts +15 -15
- package/dist/components/Attachment/AttachmentContainer.js +2 -2
- package/dist/components/Attachment/Audio.d.ts +3 -4
- package/dist/components/Attachment/Card.d.ts +1 -1
- package/dist/components/Attachment/FileAttachment.d.ts +3 -4
- package/dist/components/Attachment/FileAttachment.js +1 -1
- package/dist/components/Attachment/UnsupportedAttachment.d.ts +3 -4
- package/dist/components/Attachment/UnsupportedAttachment.js +1 -1
- package/dist/components/Attachment/VoiceRecording.d.ts +4 -5
- package/dist/components/Attachment/components/FileSizeIndicator.d.ts +1 -1
- package/dist/components/Attachment/components/FileSizeIndicator.js +4 -2
- package/dist/components/Attachment/utils.d.ts +8 -22
- package/dist/components/Attachment/utils.js +3 -18
- package/dist/components/Avatar/Avatar.d.ts +3 -4
- package/dist/components/Avatar/ChannelAvatar.d.ts +3 -4
- package/dist/components/Avatar/ChannelAvatar.js +1 -1
- package/dist/components/Avatar/GroupAvatar.d.ts +2 -2
- package/dist/components/Channel/Channel.d.ts +18 -37
- package/dist/components/Channel/Channel.js +31 -92
- package/dist/components/Channel/channelState.d.ts +17 -18
- package/dist/components/Channel/hooks/useChannelContainerClasses.d.ts +2 -3
- package/dist/components/Channel/hooks/useCreateChannelStateContext.d.ts +2 -3
- package/dist/components/Channel/hooks/useCreateChannelStateContext.js +1 -15
- package/dist/components/Channel/hooks/useCreateTypingContext.d.ts +1 -2
- package/dist/components/Channel/hooks/useEditMessageHandler.d.ts +3 -4
- package/dist/components/Channel/hooks/useMentionsHandlers.d.ts +3 -4
- package/dist/components/Channel/utils.d.ts +8 -6
- package/dist/components/Channel/utils.js +1 -0
- package/dist/components/ChannelHeader/ChannelHeader.d.ts +2 -3
- package/dist/components/ChannelList/ChannelList.d.ts +31 -30
- package/dist/components/ChannelList/ChannelList.js +8 -10
- package/dist/components/ChannelList/ChannelListMessenger.d.ts +6 -6
- package/dist/components/ChannelList/hooks/useChannelDeletedListener.d.ts +1 -2
- package/dist/components/ChannelList/hooks/useChannelHiddenListener.d.ts +1 -2
- package/dist/components/ChannelList/hooks/useChannelListShape.d.ts +44 -44
- package/dist/components/ChannelList/hooks/useChannelListShape.js +0 -2
- package/dist/components/ChannelList/hooks/useChannelMembershipState.d.ts +3 -3
- package/dist/components/ChannelList/hooks/useChannelTruncatedListener.d.ts +1 -2
- package/dist/components/ChannelList/hooks/useChannelUpdatedListener.d.ts +1 -2
- package/dist/components/ChannelList/hooks/useChannelVisibleListener.d.ts +1 -2
- package/dist/components/ChannelList/hooks/useConnectionRecoveredListener.d.ts +1 -2
- package/dist/components/ChannelList/hooks/useMessageNewListener.d.ts +1 -2
- package/dist/components/ChannelList/hooks/useNotificationAddedToChannelListener.d.ts +1 -2
- package/dist/components/ChannelList/hooks/useNotificationMessageNewListener.d.ts +1 -2
- package/dist/components/ChannelList/hooks/useNotificationRemovedFromChannelListener.d.ts +1 -2
- package/dist/components/ChannelList/hooks/usePaginatedChannels.d.ts +7 -8
- package/dist/components/ChannelList/hooks/usePaginatedChannels.js +3 -3
- package/dist/components/ChannelList/hooks/useSelectedChannelState.d.ts +7 -7
- package/dist/components/ChannelList/hooks/useUserPresenceChangedListener.d.ts +1 -2
- package/dist/components/ChannelList/utils.d.ts +20 -21
- package/dist/components/ChannelList/utils.js +2 -2
- package/dist/components/ChannelPreview/ChannelPreview.d.ts +15 -16
- package/dist/components/ChannelPreview/ChannelPreview.js +1 -1
- package/dist/components/ChannelPreview/ChannelPreviewActionButtons.d.ts +4 -4
- package/dist/components/ChannelPreview/ChannelPreviewMessenger.d.ts +1 -2
- package/dist/components/ChannelPreview/hooks/useChannelPreviewInfo.d.ts +3 -4
- package/dist/components/ChannelPreview/hooks/useIsChannelMuted.d.ts +1 -2
- package/dist/components/ChannelPreview/hooks/useMessageDeliveryStatus.d.ts +5 -7
- package/dist/components/ChannelPreview/icons.d.ts +1 -1
- package/dist/components/ChannelPreview/utils.d.ts +7 -7
- package/dist/components/ChannelSearch/ChannelSearch.d.ts +5 -6
- package/dist/components/ChannelSearch/ChannelSearch.js +2 -2
- package/dist/components/ChannelSearch/SearchBar.d.ts +1 -1
- package/dist/components/ChannelSearch/SearchBar.js +1 -1
- package/dist/components/ChannelSearch/SearchResults.d.ts +13 -14
- package/dist/components/ChannelSearch/SearchResults.js +1 -1
- package/dist/components/ChannelSearch/hooks/useChannelSearch.d.ts +17 -18
- package/dist/components/ChannelSearch/hooks/useChannelSearch.js +2 -6
- package/dist/components/ChannelSearch/utils.d.ts +2 -3
- package/dist/components/Chat/Chat.d.ts +9 -9
- package/dist/components/Chat/hooks/useChannelsQueryState.d.ts +1 -1
- package/dist/components/Chat/hooks/useChat.d.ts +10 -10
- package/dist/components/Chat/hooks/useChat.js +4 -3
- package/dist/components/Chat/hooks/useCreateChatClient.d.ts +4 -4
- package/dist/components/Chat/hooks/useCreateChatContext.d.ts +1 -2
- package/dist/components/Dialog/DialogAnchor.d.ts +4 -3
- package/dist/components/Dialog/DialogAnchor.js +2 -2
- package/dist/components/Dialog/DialogMenu.d.ts +2 -1
- package/dist/components/Dialog/DialogPortal.d.ts +2 -1
- package/dist/components/Dialog/FormDialog.d.ts +2 -1
- package/dist/components/Dialog/FormDialog.js +1 -1
- package/dist/components/Dialog/PromptDialog.d.ts +2 -1
- package/dist/components/DragAndDrop/DragAndDropContainer.d.ts +2 -1
- package/dist/components/EventComponent/EventComponent.d.ts +7 -6
- package/dist/components/Form/FieldError.d.ts +2 -1
- package/dist/components/Form/SwitchField.d.ts +2 -1
- package/dist/components/Form/SwitchField.js +1 -1
- package/dist/components/Gallery/Gallery.d.ts +5 -5
- package/dist/components/Gallery/Image.d.ts +6 -5
- package/dist/components/Gallery/ModalGallery.d.ts +3 -4
- package/dist/components/InfiniteScrollPaginator/InfiniteScroll.d.ts +2 -1
- package/dist/components/InfiniteScrollPaginator/InfiniteScrollPaginator.d.ts +2 -1
- package/dist/components/LoadMore/LoadMoreButton.d.ts +2 -1
- package/dist/components/LoadMore/LoadMorePaginator.d.ts +3 -2
- package/dist/components/LoadMore/LoadMorePaginator.js +1 -1
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecorder.js +3 -2
- package/dist/components/MediaRecorder/AudioRecorder/AudioRecordingInProgress.js +1 -1
- package/dist/components/MediaRecorder/RecordingPermissionDeniedNotification.d.ts +1 -1
- package/dist/components/MediaRecorder/classes/MediaRecorderController.d.ts +11 -23
- package/dist/components/MediaRecorder/hooks/useMediaRecorder.d.ts +8 -8
- package/dist/components/MediaRecorder/hooks/useMediaRecorder.js +6 -4
- package/dist/components/MediaRecorder/observable/BehaviorSubject.d.ts +2 -2
- package/dist/components/MediaRecorder/observable/Observable.d.ts +1 -1
- package/dist/components/MediaRecorder/observable/Subject.d.ts +3 -2
- package/dist/components/Message/FixedHeightMessage.d.ts +4 -5
- package/dist/components/Message/Message.d.ts +1 -2
- package/dist/components/Message/MessageBlocked.d.ts +2 -0
- package/dist/components/Message/MessageBlocked.js +16 -0
- package/dist/components/Message/MessageDeleted.d.ts +4 -5
- package/dist/components/Message/MessageEditedTimestamp.d.ts +2 -3
- package/dist/components/Message/MessageErrorText.d.ts +4 -5
- package/dist/components/Message/MessageErrorText.js +2 -2
- package/dist/components/Message/MessageOptions.d.ts +3 -3
- package/dist/components/Message/MessageRepliesCountButton.d.ts +2 -1
- package/dist/components/Message/MessageSimple.d.ts +1 -2
- package/dist/components/Message/MessageSimple.js +14 -12
- package/dist/components/Message/MessageStatus.d.ts +3 -4
- package/dist/components/Message/MessageText.d.ts +6 -6
- package/dist/components/Message/MessageTimestamp.d.ts +4 -5
- package/dist/components/Message/QuotedMessage.d.ts +2 -3
- package/dist/components/Message/QuotedMessage.js +1 -1
- package/dist/components/Message/StreamedMessageText.d.ts +3 -4
- package/dist/components/Message/hooks/useActionHandler.d.ts +2 -3
- package/dist/components/Message/hooks/useActionHandler.js +1 -1
- package/dist/components/Message/hooks/useDeleteHandler.d.ts +4 -5
- package/dist/components/Message/hooks/useFlagHandler.d.ts +5 -6
- package/dist/components/Message/hooks/useMarkUnreadHandler.d.ts +5 -6
- package/dist/components/Message/hooks/useMentionsHandler.d.ts +6 -8
- package/dist/components/Message/hooks/useMessageTextStreaming.d.ts +2 -3
- package/dist/components/Message/hooks/useMuteHandler.d.ts +5 -7
- package/dist/components/Message/hooks/useMuteHandler.js +1 -1
- package/dist/components/Message/hooks/useOpenThreadHandler.d.ts +2 -3
- package/dist/components/Message/hooks/usePinHandler.d.ts +4 -5
- package/dist/components/Message/hooks/usePinHandler.js +1 -1
- package/dist/components/Message/hooks/useReactionHandler.d.ts +3 -4
- package/dist/components/Message/hooks/useReactionHandler.js +2 -4
- package/dist/components/Message/hooks/useReactionsFetcher.d.ts +5 -7
- package/dist/components/Message/hooks/useRetryHandler.d.ts +2 -3
- package/dist/components/Message/hooks/useRetryHandler.js +1 -1
- package/dist/components/Message/hooks/useUserHandler.d.ts +5 -6
- package/dist/components/Message/hooks/useUserRole.d.ts +2 -3
- package/dist/components/Message/hooks/useUserRole.js +1 -1
- package/dist/components/Message/icons.d.ts +2 -2
- package/dist/components/Message/icons.js +1 -1
- package/dist/components/Message/renderText/componentRenderers/Anchor.d.ts +2 -1
- package/dist/components/Message/renderText/componentRenderers/Emoji.d.ts +1 -1
- package/dist/components/Message/renderText/componentRenderers/Mention.d.ts +5 -5
- package/dist/components/Message/renderText/componentRenderers/Mention.js +1 -1
- package/dist/components/Message/renderText/rehypePlugins/mentionsMarkdownPlugin.d.ts +1 -2
- package/dist/components/Message/renderText/renderText.d.ts +6 -6
- package/dist/components/Message/renderText/types.d.ts +1 -1
- package/dist/components/Message/types.d.ts +27 -28
- package/dist/components/Message/utils.d.ts +21 -21
- package/dist/components/Message/utils.js +8 -4
- package/dist/components/MessageActions/CustomMessageActionsList.d.ts +6 -7
- package/dist/components/MessageActions/MessageActions.d.ts +6 -5
- package/dist/components/MessageActions/MessageActions.js +1 -1
- package/dist/components/MessageActions/MessageActionsBox.d.ts +5 -5
- package/dist/components/MessageActions/MessageActionsBox.js +4 -3
- package/dist/components/MessageActions/hooks/useMessageActionsBoxPopper.d.ts +1 -1
- package/dist/components/MessageBounce/MessageBounceModal.d.ts +4 -3
- package/dist/components/MessageBounce/MessageBouncePrompt.d.ts +1 -2
- package/dist/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.d.ts +11 -11
- package/dist/components/MessageInput/AttachmentPreviewList/AttachmentPreviewList.js +17 -14
- package/dist/components/MessageInput/AttachmentPreviewList/FileAttachmentPreview.d.ts +4 -12
- package/dist/components/MessageInput/AttachmentPreviewList/FileAttachmentPreview.js +8 -5
- package/dist/components/MessageInput/AttachmentPreviewList/ImageAttachmentPreview.d.ts +4 -5
- package/dist/components/MessageInput/AttachmentPreviewList/ImageAttachmentPreview.js +2 -2
- package/dist/components/MessageInput/AttachmentPreviewList/UnsupportedAttachmentPreview.d.ts +7 -5
- package/dist/components/MessageInput/AttachmentPreviewList/UnsupportedAttachmentPreview.js +5 -2
- package/dist/components/MessageInput/AttachmentPreviewList/VoiceRecordingPreview.d.ts +4 -5
- package/dist/components/MessageInput/AttachmentPreviewList/VoiceRecordingPreview.js +5 -2
- package/dist/components/MessageInput/AttachmentPreviewList/index.d.ts +1 -1
- package/dist/components/MessageInput/AttachmentPreviewList/types.d.ts +3 -4
- package/dist/components/MessageInput/AttachmentSelector.d.ts +1 -2
- package/dist/components/MessageInput/AttachmentSelector.js +5 -3
- package/dist/components/MessageInput/EditMessageForm.d.ts +3 -2
- package/dist/components/MessageInput/EditMessageForm.js +30 -6
- package/dist/components/MessageInput/LinkPreviewList.d.ts +6 -4
- package/dist/components/MessageInput/LinkPreviewList.js +24 -10
- package/dist/components/MessageInput/MessageInput.d.ts +23 -45
- package/dist/components/MessageInput/MessageInput.js +25 -15
- package/dist/components/MessageInput/MessageInputFlat.d.ts +1 -2
- package/dist/components/MessageInput/MessageInputFlat.js +31 -76
- package/dist/components/MessageInput/QuotedMessagePreview.d.ts +4 -7
- package/dist/components/MessageInput/QuotedMessagePreview.js +22 -16
- package/dist/components/MessageInput/SendButton.d.ts +4 -5
- package/dist/components/MessageInput/SendButton.js +6 -2
- package/dist/components/MessageInput/WithDragAndDropUpload.d.ts +38 -0
- package/dist/components/MessageInput/WithDragAndDropUpload.js +96 -0
- package/dist/components/MessageInput/hooks/index.d.ts +5 -1
- package/dist/components/MessageInput/hooks/index.js +5 -1
- package/dist/components/MessageInput/hooks/useAttachmentManagerState.d.ts +10 -0
- package/dist/components/MessageInput/hooks/useAttachmentManagerState.js +19 -0
- package/dist/components/MessageInput/hooks/useCanCreatePoll.d.ts +1 -0
- package/dist/components/MessageInput/hooks/useCanCreatePoll.js +10 -0
- package/dist/components/MessageInput/hooks/useCooldownTimer.d.ts +2 -3
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.d.ts +1 -2
- package/dist/components/MessageInput/hooks/useCreateMessageInputContext.js +1 -55
- package/dist/components/MessageInput/hooks/useMessageComposer.d.ts +2 -0
- package/dist/components/MessageInput/hooks/useMessageComposer.js +80 -0
- package/dist/components/MessageInput/hooks/useMessageComposerHasSendableData.d.ts +1 -0
- package/dist/components/MessageInput/hooks/useMessageComposerHasSendableData.js +8 -0
- package/dist/components/MessageInput/hooks/useMessageInputControls.d.ts +12 -0
- package/dist/components/MessageInput/hooks/useMessageInputControls.js +23 -0
- package/dist/components/MessageInput/hooks/useMessageInputText.d.ts +1 -5
- package/dist/components/MessageInput/hooks/useMessageInputText.js +19 -53
- package/dist/components/MessageInput/hooks/usePasteHandler.d.ts +1 -3
- package/dist/components/MessageInput/hooks/usePasteHandler.js +6 -8
- package/dist/components/MessageInput/hooks/useSubmitHandler.d.ts +2 -6
- package/dist/components/MessageInput/hooks/useSubmitHandler.js +30 -98
- package/dist/components/MessageInput/hooks/utils.d.ts +0 -27
- package/dist/components/MessageInput/hooks/utils.js +0 -124
- package/dist/components/MessageInput/index.d.ts +1 -2
- package/dist/components/MessageInput/index.js +1 -2
- package/dist/components/MessageList/ConnectionStatus.d.ts +1 -2
- package/dist/components/MessageList/ConnectionStatus.js +1 -1
- package/dist/components/MessageList/CustomNotification.d.ts +2 -1
- package/dist/components/MessageList/GiphyPreviewMessage.d.ts +4 -5
- package/dist/components/MessageList/MessageList.d.ts +11 -12
- package/dist/components/MessageList/MessageList.js +4 -4
- package/dist/components/MessageList/MessageNotification.d.ts +2 -1
- package/dist/components/MessageList/VirtualizedMessageList.d.ts +22 -21
- package/dist/components/MessageList/VirtualizedMessageList.js +6 -6
- package/dist/components/MessageList/VirtualizedMessageListComponents.d.ts +10 -10
- package/dist/components/MessageList/VirtualizedMessageListComponents.js +7 -7
- package/dist/components/MessageList/hooks/MessageList/useEnrichedMessages.d.ts +8 -10
- package/dist/components/MessageList/hooks/MessageList/useEnrichedMessages.js +1 -1
- package/dist/components/MessageList/hooks/MessageList/useMessageListElements.d.ts +11 -12
- package/dist/components/MessageList/hooks/MessageList/useMessageListScrollManager.d.ts +4 -5
- package/dist/components/MessageList/hooks/MessageList/useScrollLocationLogic.d.ts +5 -6
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.d.ts +4 -5
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useGiphyPreview.js +3 -2
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.d.ts +4 -5
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useMessageSetKey.js +1 -1
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useNewMessageNotification.d.ts +2 -3
- package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.d.ts +2 -3
- package/dist/components/MessageList/hooks/VirtualizedMessageList/usePrependMessagesCount.js +6 -2
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useScrollToBottomOnNewMessage.d.ts +4 -5
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useShouldForceScrollToBottom.d.ts +2 -3
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.d.ts +3 -4
- package/dist/components/MessageList/hooks/VirtualizedMessageList/useUnreadMessagesNotificationVirtualized.js +5 -6
- package/dist/components/MessageList/hooks/useLastReadData.d.ts +5 -6
- package/dist/components/MessageList/hooks/useLastReadData.js +5 -1
- package/dist/components/MessageList/hooks/useMarkRead.d.ts +1 -2
- package/dist/components/MessageList/renderMessages.d.ts +14 -14
- package/dist/components/MessageList/renderMessages.js +8 -7
- package/dist/components/MessageList/utils.d.ts +34 -28
- package/dist/components/MessageList/utils.js +26 -21
- package/dist/components/Modal/Modal.d.ts +2 -1
- package/dist/components/Poll/Poll.d.ts +2 -3
- package/dist/components/Poll/Poll.js +1 -1
- package/dist/components/Poll/PollActions/AddCommentForm.d.ts +1 -2
- package/dist/components/Poll/PollActions/AddCommentForm.js +4 -2
- package/dist/components/Poll/PollActions/EndPollDialog.d.ts +1 -2
- package/dist/components/Poll/PollActions/EndPollDialog.js +1 -1
- package/dist/components/Poll/PollActions/PollAction.d.ts +2 -1
- package/dist/components/Poll/PollActions/PollActions.d.ts +7 -8
- package/dist/components/Poll/PollActions/PollActions.js +5 -5
- package/dist/components/Poll/PollActions/PollAnswerList.d.ts +1 -2
- package/dist/components/Poll/PollActions/PollOptionsFullList.d.ts +1 -2
- package/dist/components/Poll/PollActions/PollOptionsFullList.js +4 -2
- package/dist/components/Poll/PollActions/PollResults/PollOptionVotesList.d.ts +3 -4
- package/dist/components/Poll/PollActions/PollResults/PollOptionVotesList.js +1 -1
- package/dist/components/Poll/PollActions/PollResults/PollOptionWithLatestVotes.d.ts +3 -4
- package/dist/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.d.ts +4 -5
- package/dist/components/Poll/PollActions/PollResults/PollOptionWithVotesHeader.js +1 -1
- package/dist/components/Poll/PollActions/PollResults/PollResults.d.ts +1 -2
- package/dist/components/Poll/PollActions/PollResults/PollResults.js +1 -1
- package/dist/components/Poll/PollActions/SuggestPollOptionForm.d.ts +1 -2
- package/dist/components/Poll/PollActions/SuggestPollOptionForm.js +3 -1
- package/dist/components/Poll/PollContent.d.ts +1 -2
- package/dist/components/Poll/PollCreationDialog/MultipleAnswersField.d.ts +2 -0
- package/dist/components/Poll/PollCreationDialog/MultipleAnswersField.js +35 -0
- package/dist/components/Poll/PollCreationDialog/NameField.d.ts +2 -0
- package/dist/components/Poll/PollCreationDialog/NameField.js +26 -0
- package/dist/components/Poll/PollCreationDialog/OptionFieldSet.d.ts +1 -8
- package/dist/components/Poll/PollCreationDialog/OptionFieldSet.js +33 -65
- package/dist/components/Poll/PollCreationDialog/PollCreationDialog.js +31 -85
- package/dist/components/Poll/PollCreationDialog/PollCreationDialogControls.d.ts +1 -4
- package/dist/components/Poll/PollCreationDialog/PollCreationDialogControls.js +15 -41
- package/dist/components/Poll/PollCreationDialog/types.d.ts +0 -14
- package/dist/components/Poll/PollHeader.d.ts +1 -2
- package/dist/components/Poll/PollOptionList.d.ts +1 -2
- package/dist/components/Poll/PollOptionList.js +4 -2
- package/dist/components/Poll/PollOptionSelector.d.ts +3 -4
- package/dist/components/Poll/PollVote.d.ts +6 -7
- package/dist/components/Poll/PollVote.js +3 -3
- package/dist/components/Poll/QuotedPoll.d.ts +1 -2
- package/dist/components/Poll/constants.d.ts +0 -1
- package/dist/components/Poll/constants.js +0 -1
- package/dist/components/Poll/hooks/useManagePollVotesRealtime.d.ts +2 -3
- package/dist/components/Poll/hooks/usePollAnswerPagination.d.ts +2 -3
- package/dist/components/Poll/hooks/usePollAnswerPagination.js +2 -2
- package/dist/components/Poll/hooks/usePollOptionVotesPagination.d.ts +2 -3
- package/dist/components/Poll/hooks/usePollOptionVotesPagination.js +1 -1
- package/dist/components/Portal/Portal.d.ts +1 -1
- package/dist/components/ReactFileUtilities/FileIcon/FileIcon.d.ts +1 -1
- package/dist/components/ReactFileUtilities/FileIcon/FileIconSet.d.ts +2 -1
- package/dist/components/ReactFileUtilities/FileIcon/iconMap.d.ts +1 -1
- package/dist/components/ReactFileUtilities/UploadButton.d.ts +3 -2
- package/dist/components/ReactFileUtilities/UploadButton.js +16 -6
- package/dist/components/ReactFileUtilities/index.d.ts +0 -1
- package/dist/components/ReactFileUtilities/index.js +0 -1
- package/dist/components/ReactFileUtilities/utils.d.ts +2 -2
- package/dist/components/Reactions/ReactionSelector.d.ts +4 -5
- package/dist/components/Reactions/ReactionSelectorWithButton.d.ts +1 -2
- package/dist/components/Reactions/ReactionsList.d.ts +6 -7
- package/dist/components/Reactions/ReactionsList.js +2 -2
- package/dist/components/Reactions/ReactionsListModal.d.ts +9 -10
- package/dist/components/Reactions/SimpleReactionsList.d.ts +5 -6
- package/dist/components/Reactions/StreamEmoji.d.ts +1 -1
- package/dist/components/Reactions/hooks/useFetchReactions.d.ts +9 -10
- package/dist/components/Reactions/hooks/useProcessReactions.d.ts +1 -2
- package/dist/components/Reactions/types.d.ts +3 -4
- package/dist/components/Reactions/utils/utils.d.ts +1 -1
- package/dist/components/SafeAnchor/SafeAnchor.d.ts +2 -1
- package/dist/components/{CommandItem → TextareaComposer/SuggestionList}/CommandItem.d.ts +2 -1
- package/dist/components/{CommandItem → TextareaComposer/SuggestionList}/CommandItem.js +1 -2
- package/dist/components/{EmoticonItem → TextareaComposer/SuggestionList}/EmoticonItem.d.ts +7 -7
- package/dist/components/TextareaComposer/SuggestionList/EmoticonItem.js +12 -0
- package/dist/components/TextareaComposer/SuggestionList/SuggestionList.d.ts +16 -0
- package/dist/components/TextareaComposer/SuggestionList/SuggestionList.js +49 -0
- package/dist/components/TextareaComposer/SuggestionList/SuggestionListItem.d.ts +18 -0
- package/dist/components/TextareaComposer/SuggestionList/SuggestionListItem.js +25 -0
- package/dist/components/{UserItem → TextareaComposer/SuggestionList}/UserItem.d.ts +7 -4
- package/dist/components/TextareaComposer/SuggestionList/UserItem.js +24 -0
- package/dist/components/TextareaComposer/SuggestionList/index.d.ts +5 -0
- package/dist/components/TextareaComposer/SuggestionList/index.js +5 -0
- package/dist/components/TextareaComposer/TextareaComposer.d.ts +13 -0
- package/dist/components/TextareaComposer/TextareaComposer.js +155 -0
- package/dist/components/TextareaComposer/index.d.ts +2 -0
- package/dist/components/TextareaComposer/index.js +2 -0
- package/dist/components/Thread/Thread.d.ts +13 -10
- package/dist/components/Thread/Thread.js +23 -12
- package/dist/components/Thread/ThreadHead.d.ts +2 -3
- package/dist/components/Thread/ThreadHeader.d.ts +5 -6
- package/dist/components/Thread/ThreadHeader.js +1 -1
- package/dist/components/Threads/ThreadContext.d.ts +2 -2
- package/dist/components/Threads/ThreadContext.js +1 -4
- package/dist/components/Threads/ThreadList/ThreadList.d.ts +1 -1
- package/dist/components/Threads/ThreadList/ThreadListItem.d.ts +1 -1
- package/dist/components/Threads/hooks/useThreadManagerState.d.ts +1 -1
- package/dist/components/Threads/hooks/useThreadState.d.ts +1 -1
- package/dist/components/Threads/icons.d.ts +1 -1
- package/dist/components/Tooltip/Tooltip.d.ts +3 -2
- package/dist/components/Tooltip/hooks/useEnterLeaveHandlers.d.ts +1 -1
- package/dist/components/TypingIndicator/TypingIndicator.d.ts +1 -2
- package/dist/components/Window/Window.d.ts +6 -6
- package/dist/components/index.d.ts +1 -5
- package/dist/components/index.js +1 -5
- package/dist/context/AttachmentSelectorContext.d.ts +2 -1
- package/dist/context/ChannelActionContext.d.ts +26 -35
- package/dist/context/ChannelListContext.d.ts +9 -9
- package/dist/context/ChannelListContext.js +1 -1
- package/dist/context/ChannelStateContext.d.ts +24 -34
- package/dist/context/ChatContext.d.ts +18 -17
- package/dist/context/ComponentContext.d.ts +41 -37
- package/dist/context/DialogManagerContext.d.ts +2 -1
- package/dist/context/MessageBounceContext.d.ts +8 -7
- package/dist/context/MessageBounceContext.js +1 -1
- package/dist/context/MessageContext.d.ts +23 -23
- package/dist/context/MessageInputContext.d.ts +8 -26
- package/dist/context/MessageInputContext.js +3 -2
- package/dist/context/MessageListContext.d.ts +2 -1
- package/dist/context/PollContext.d.ts +8 -8
- package/dist/context/TranslationContext.d.ts +2 -1
- package/dist/context/TypingContext.d.ts +11 -10
- package/dist/context/VirtualizedMessageListContext.d.ts +2 -1
- package/dist/context/WithComponents.d.ts +3 -2
- package/dist/css/v2/index.css +1 -1
- package/dist/css/v2/index.layout.css +1 -1
- package/dist/experimental/MessageActions/MessageActions.d.ts +1 -1
- package/dist/experimental/MessageActions/MessageActions.js +1 -1
- package/dist/experimental/MessageActions/defaults.js +4 -3
- package/dist/experimental/Search/Search.d.ts +1 -2
- package/dist/experimental/Search/SearchContext.d.ts +8 -8
- package/dist/experimental/Search/SearchResults/SearchResultItem.d.ts +11 -11
- package/dist/experimental/Search/SearchResults/SearchResultItem.js +3 -3
- package/dist/experimental/Search/SearchResults/SearchResults.d.ts +1 -2
- package/dist/experimental/Search/SearchResults/SearchResultsHeader.d.ts +1 -2
- package/dist/experimental/Search/SearchResults/SearchResultsHeader.js +1 -1
- package/dist/experimental/Search/SearchResults/SearchSourceResultList.d.ts +2 -3
- package/dist/experimental/Search/SearchResults/SearchSourceResultListFooter.d.ts +1 -2
- package/dist/experimental/Search/SearchResults/SearchSourceResults.d.ts +1 -2
- package/dist/experimental/Search/SearchResults/SearchSourceResults.js +1 -1
- package/dist/experimental/Search/SearchSourceResultsContext.d.ts +2 -1
- package/dist/experimental/Search/hooks/useSearchFocusedMessage.d.ts +1 -2
- package/dist/experimental/Search/hooks/useSearchFocusedMessage.js +3 -1
- package/dist/experimental/Search/hooks/useSearchQueriesInProgress.d.ts +3 -4
- package/dist/experimental/index.browser.cjs +1139 -1075
- package/dist/experimental/index.browser.cjs.map +4 -4
- package/dist/experimental/index.node.cjs +1139 -1075
- package/dist/experimental/index.node.cjs.map +4 -4
- package/dist/i18n/Streami18n.d.ts +2 -1
- package/dist/i18n/de.json +1 -0
- package/dist/i18n/en.json +1 -0
- package/dist/i18n/es.json +1 -0
- package/dist/i18n/fr.json +1 -0
- package/dist/i18n/hi.json +1 -0
- package/dist/i18n/it.json +1 -0
- package/dist/i18n/ja.json +1 -0
- package/dist/i18n/ko.json +1 -0
- package/dist/i18n/nl.json +1 -0
- package/dist/i18n/pt.json +1 -0
- package/dist/i18n/ru.json +1 -0
- package/dist/i18n/tr.json +1 -0
- package/dist/i18n/types.d.ts +2 -2
- package/dist/i18n/utils.d.ts +1 -1
- package/dist/i18n/utils.js +3 -1
- package/dist/index.browser.cjs +28774 -30813
- package/dist/index.browser.cjs.map +4 -4
- package/dist/index.node.cjs +30798 -32844
- package/dist/index.node.cjs.map +4 -4
- package/dist/plugins/Emojis/index.browser.cjs +133 -5
- package/dist/plugins/Emojis/index.browser.cjs.map +4 -4
- package/dist/plugins/Emojis/index.d.ts +1 -0
- package/dist/plugins/Emojis/index.js +1 -0
- package/dist/plugins/Emojis/index.node.cjs +135 -6
- package/dist/plugins/Emojis/index.node.cjs.map +4 -4
- package/dist/plugins/Emojis/middleware/index.d.ts +1 -0
- package/dist/plugins/Emojis/middleware/index.js +1 -0
- package/dist/plugins/Emojis/middleware/textComposerEmojiMiddleware.d.ts +66 -0
- package/dist/plugins/Emojis/middleware/textComposerEmojiMiddleware.js +143 -0
- package/dist/plugins/encoders/mp3.browser.cjs.map +2 -2
- package/dist/plugins/encoders/mp3.node.cjs.map +2 -2
- package/dist/scss/v2/Autocomplete/Autocomplete-layout.scss +14 -0
- package/dist/scss/v2/Autocomplete/Autocomplete-theme.scss +11 -0
- package/dist/scss/v2/DropzoneContainer/DropzoneContainer-layout.scss +14 -0
- package/dist/scss/v2/DropzoneContainer/DropzoneContainer-theme.scss +17 -0
- package/dist/scss/v2/LinkPreview/LinkPreview-layout.scss +18 -0
- package/dist/scss/v2/LinkPreview/LinkPreview-theme.scss +15 -0
- package/dist/scss/v2/Message/Message-layout.scss +8 -0
- package/dist/scss/v2/Message/Message-theme.scss +29 -0
- package/dist/scss/v2/MessageInput/MessageInput-layout.scss +0 -13
- package/dist/scss/v2/MessageInput/MessageInput-theme.scss +8 -19
- package/dist/scss/v2/index.layout.scss +2 -1
- package/dist/scss/v2/index.scss +1 -0
- package/dist/types/defaultDataInterfaces.d.ts +25 -0
- package/dist/types/index.d.ts +2 -1
- package/dist/types/types.d.ts +2 -62
- package/dist/utils/getChannel.d.ts +5 -6
- package/dist/utils/mergeDeep.d.ts +2 -3
- package/package.json +8 -11
- package/dist/components/AutoCompleteTextarea/Item.d.ts +0 -2
- package/dist/components/AutoCompleteTextarea/Item.js +0 -10
- package/dist/components/AutoCompleteTextarea/List.d.ts +0 -17
- package/dist/components/AutoCompleteTextarea/List.js +0 -89
- package/dist/components/AutoCompleteTextarea/Textarea.d.ts +0 -114
- package/dist/components/AutoCompleteTextarea/Textarea.js +0 -593
- package/dist/components/AutoCompleteTextarea/index.d.ts +0 -4
- package/dist/components/AutoCompleteTextarea/index.js +0 -4
- package/dist/components/AutoCompleteTextarea/types.d.ts +0 -15
- package/dist/components/AutoCompleteTextarea/utils.d.ts +0 -6
- package/dist/components/AutoCompleteTextarea/utils.js +0 -40
- package/dist/components/ChatAutoComplete/ChatAutoComplete.d.ts +0 -78
- package/dist/components/ChatAutoComplete/ChatAutoComplete.js +0 -33
- package/dist/components/ChatAutoComplete/index.d.ts +0 -1
- package/dist/components/ChatAutoComplete/index.js +0 -1
- package/dist/components/CommandItem/index.d.ts +0 -1
- package/dist/components/CommandItem/index.js +0 -1
- package/dist/components/EmoticonItem/EmoticonItem.js +0 -16
- package/dist/components/EmoticonItem/index.d.ts +0 -1
- package/dist/components/EmoticonItem/index.js +0 -1
- package/dist/components/MessageInput/DefaultTriggerProvider.d.ts +0 -35
- package/dist/components/MessageInput/DefaultTriggerProvider.js +0 -24
- package/dist/components/MessageInput/DropzoneProvider.d.ts +0 -4
- package/dist/components/MessageInput/DropzoneProvider.js +0 -23
- package/dist/components/MessageInput/hooks/useAttachments.d.ts +0 -14
- package/dist/components/MessageInput/hooks/useAttachments.js +0 -209
- package/dist/components/MessageInput/hooks/useCommandTrigger.d.ts +0 -3
- package/dist/components/MessageInput/hooks/useCommandTrigger.js +0 -62
- package/dist/components/MessageInput/hooks/useEmojiTrigger.d.ts +0 -3
- package/dist/components/MessageInput/hooks/useEmojiTrigger.js +0 -29
- package/dist/components/MessageInput/hooks/useLinkPreviews.d.ts +0 -30
- package/dist/components/MessageInput/hooks/useLinkPreviews.js +0 -109
- package/dist/components/MessageInput/hooks/useMessageInputState.d.ts +0 -71
- package/dist/components/MessageInput/hooks/useMessageInputState.js +0 -200
- package/dist/components/MessageInput/hooks/useUserTrigger.d.ts +0 -12
- package/dist/components/MessageInput/hooks/useUserTrigger.js +0 -130
- package/dist/components/MessageInput/types.d.ts +0 -87
- package/dist/components/MessageInput/types.js +0 -19
- package/dist/components/ReactFileUtilities/ImageDropzone.d.ts +0 -16
- package/dist/components/ReactFileUtilities/ImageDropzone.js +0 -42
- package/dist/components/UserItem/UserItem.js +0 -26
- package/dist/components/UserItem/index.d.ts +0 -1
- package/dist/components/UserItem/index.js +0 -1
- /package/dist/components/{MessageInput → MediaRecorder/AudioRecorder}/hooks/useTimeElapsed.d.ts +0 -0
- /package/dist/components/{MessageInput → MediaRecorder/AudioRecorder}/hooks/useTimeElapsed.js +0 -0
- /package/dist/scss/v2/DragAndDropContainer/{DragAmdDropContainer-layout.scss → DragAndDropContainer-layout.scss} +0 -0
- /package/dist/{components/AutoCompleteTextarea/types.js → types/defaultDataInterfaces.js} +0 -0
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import React, { useCallback, useContext, useEffect, useMemo, useRef } from 'react';
|
|
2
|
+
import { useDropzone } from 'react-dropzone';
|
|
3
|
+
import clsx from 'clsx';
|
|
4
|
+
import { useMessageInputContext, useTranslationContext } from '../../context';
|
|
5
|
+
import { useAttachmentManagerState, useMessageComposer } from './hooks';
|
|
6
|
+
import { useStateStore } from '../../store';
|
|
7
|
+
const DragAndDropUploadContext = React.createContext({
|
|
8
|
+
subscribeToDrop: null,
|
|
9
|
+
});
|
|
10
|
+
export const useDragAndDropUploadContext = () => useContext(DragAndDropUploadContext);
|
|
11
|
+
/**
|
|
12
|
+
* @private This hook should be used only once directly in the `MessageInputProvider` to
|
|
13
|
+
* register `uploadNewFiles` functions of the rendered `MessageInputs`. Each `MessageInput`
|
|
14
|
+
* will then be notified when the drop event occurs from within the `WithDragAndDropUpload`
|
|
15
|
+
* component.
|
|
16
|
+
*/
|
|
17
|
+
export const useRegisterDropHandlers = () => {
|
|
18
|
+
const { subscribeToDrop } = useDragAndDropUploadContext();
|
|
19
|
+
const messageComposer = useMessageComposer();
|
|
20
|
+
useEffect(() => {
|
|
21
|
+
const unsubscribe = subscribeToDrop?.(messageComposer.attachmentManager.uploadFiles);
|
|
22
|
+
return unsubscribe;
|
|
23
|
+
}, [subscribeToDrop, messageComposer]);
|
|
24
|
+
};
|
|
25
|
+
const attachmentManagerConfigStateSelector = (state) => ({
|
|
26
|
+
acceptedFiles: state.attachments.acceptedFiles,
|
|
27
|
+
multipleUploads: state.attachments.maxNumberOfFilesPerMessage > 1,
|
|
28
|
+
});
|
|
29
|
+
/**
|
|
30
|
+
* Wrapper to replace now deprecated `Channel.dragAndDropWindow` option.
|
|
31
|
+
*
|
|
32
|
+
* @example
|
|
33
|
+
* ```tsx
|
|
34
|
+
* <Channel>
|
|
35
|
+
* <WithDragAndDropUpload component="section" className="message-list-dnd-wrapper">
|
|
36
|
+
* <Window>
|
|
37
|
+
* <MessageList />
|
|
38
|
+
* <MessageInput />
|
|
39
|
+
* </Window>
|
|
40
|
+
* </WithDragAndDropUpload>
|
|
41
|
+
* <Thread />
|
|
42
|
+
* <Channel>
|
|
43
|
+
* ```
|
|
44
|
+
*/
|
|
45
|
+
export const WithDragAndDropUpload = ({ children, className, component: Component = 'div', style, }) => {
|
|
46
|
+
const dropHandlersRef = useRef(new Set());
|
|
47
|
+
const { t } = useTranslationContext();
|
|
48
|
+
const messageInputContext = useMessageInputContext();
|
|
49
|
+
const dragAndDropUploadContext = useDragAndDropUploadContext();
|
|
50
|
+
const messageComposer = useMessageComposer();
|
|
51
|
+
const { isUploadEnabled } = useAttachmentManagerState();
|
|
52
|
+
const { acceptedFiles, multipleUploads } = useStateStore(messageComposer.configState, attachmentManagerConfigStateSelector);
|
|
53
|
+
// if message input context is available, there's no need to use the queue
|
|
54
|
+
const isWithinMessageInputContext = Object.keys(messageInputContext).length > 0;
|
|
55
|
+
const accept = useMemo(() => acceptedFiles.reduce((mediaTypeMap, mediaType) => {
|
|
56
|
+
mediaTypeMap[mediaType] ?? (mediaTypeMap[mediaType] = []);
|
|
57
|
+
return mediaTypeMap;
|
|
58
|
+
}, {}), [acceptedFiles]);
|
|
59
|
+
const subscribeToDrop = useCallback((fn) => {
|
|
60
|
+
dropHandlersRef.current.add(fn);
|
|
61
|
+
return () => {
|
|
62
|
+
dropHandlersRef.current.delete(fn);
|
|
63
|
+
};
|
|
64
|
+
}, []);
|
|
65
|
+
const handleDrop = useCallback((files) => {
|
|
66
|
+
dropHandlersRef.current.forEach((fn) => fn(files));
|
|
67
|
+
}, []);
|
|
68
|
+
const { getRootProps, isDragActive, isDragReject } = useDropzone({
|
|
69
|
+
accept,
|
|
70
|
+
// apply `disabled` rules if available, otherwise allow anything and
|
|
71
|
+
// let the `uploadNewFiles` handle the limitations internally
|
|
72
|
+
disabled: isWithinMessageInputContext
|
|
73
|
+
? !isUploadEnabled || (messageInputContext.cooldownRemaining ?? 0) > 0
|
|
74
|
+
: false,
|
|
75
|
+
multiple: multipleUploads,
|
|
76
|
+
noClick: true,
|
|
77
|
+
onDrop: isWithinMessageInputContext
|
|
78
|
+
? messageComposer.attachmentManager.uploadFiles
|
|
79
|
+
: handleDrop,
|
|
80
|
+
});
|
|
81
|
+
// nested WithDragAndDropUpload components render wrappers without functionality
|
|
82
|
+
// (MessageInputFlat has a default WithDragAndDropUpload)
|
|
83
|
+
if (dragAndDropUploadContext.subscribeToDrop !== null) {
|
|
84
|
+
return React.createElement(Component, { className: className }, children);
|
|
85
|
+
}
|
|
86
|
+
return (React.createElement(DragAndDropUploadContext.Provider, { value: {
|
|
87
|
+
subscribeToDrop,
|
|
88
|
+
} },
|
|
89
|
+
React.createElement(Component, { ...getRootProps({ className, style }) },
|
|
90
|
+
isDragActive && (React.createElement("div", { className: clsx('str-chat__dropzone-container', {
|
|
91
|
+
'str-chat__dropzone-container--not-accepted': isDragReject,
|
|
92
|
+
}) },
|
|
93
|
+
!isDragReject && React.createElement("p", null, t('Drag your files here')),
|
|
94
|
+
isDragReject && React.createElement("p", null, t('Some of the files will not be accepted')))),
|
|
95
|
+
children)));
|
|
96
|
+
};
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
+
export * from './useAttachmentManagerState';
|
|
2
|
+
export * from './useCanCreatePoll';
|
|
1
3
|
export * from './useCooldownTimer';
|
|
2
|
-
export * from './
|
|
4
|
+
export * from './useMessageInputControls';
|
|
5
|
+
export * from './useMessageComposer';
|
|
6
|
+
export * from './useMessageComposerHasSendableData';
|
|
@@ -1,2 +1,6 @@
|
|
|
1
|
+
export * from './useAttachmentManagerState';
|
|
2
|
+
export * from './useCanCreatePoll';
|
|
1
3
|
export * from './useCooldownTimer';
|
|
2
|
-
export * from './
|
|
4
|
+
export * from './useMessageInputControls';
|
|
5
|
+
export * from './useMessageComposer';
|
|
6
|
+
export * from './useMessageComposerHasSendableData';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare const useAttachmentManagerState: () => {
|
|
2
|
+
attachments: import("stream-chat").LocalAttachment[];
|
|
3
|
+
availableUploadSlots: number;
|
|
4
|
+
blockedUploadsCount: number;
|
|
5
|
+
failedUploadsCount: number;
|
|
6
|
+
isUploadEnabled: boolean;
|
|
7
|
+
pendingUploadsCount: number;
|
|
8
|
+
successfulUploadsCount: number;
|
|
9
|
+
uploadsInProgressCount: number;
|
|
10
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { useMessageComposer } from './useMessageComposer';
|
|
2
|
+
import { useStateStore } from '../../../store';
|
|
3
|
+
const stateSelector = (state) => ({
|
|
4
|
+
attachments: state.attachments,
|
|
5
|
+
});
|
|
6
|
+
export const useAttachmentManagerState = () => {
|
|
7
|
+
const { attachmentManager } = useMessageComposer();
|
|
8
|
+
const { attachments } = useStateStore(attachmentManager.state, stateSelector);
|
|
9
|
+
return {
|
|
10
|
+
attachments,
|
|
11
|
+
availableUploadSlots: attachmentManager.availableUploadSlots,
|
|
12
|
+
blockedUploadsCount: attachmentManager.blockedUploadsCount,
|
|
13
|
+
failedUploadsCount: attachmentManager.failedUploadsCount,
|
|
14
|
+
isUploadEnabled: attachmentManager.isUploadEnabled,
|
|
15
|
+
pendingUploadsCount: attachmentManager.pendingUploadsCount,
|
|
16
|
+
successfulUploadsCount: attachmentManager.successfulUploadsCount,
|
|
17
|
+
uploadsInProgressCount: attachmentManager.uploadsInProgressCount,
|
|
18
|
+
};
|
|
19
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useCanCreatePoll: () => boolean;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { useMessageComposer } from './useMessageComposer';
|
|
2
|
+
import { useEffect, useState } from 'react';
|
|
3
|
+
export const useCanCreatePoll = () => {
|
|
4
|
+
const { pollComposer } = useMessageComposer();
|
|
5
|
+
const [canCreatePoll, setCanCreatePoll] = useState(pollComposer.canCreatePoll);
|
|
6
|
+
useEffect(() => pollComposer.state.subscribe(() => {
|
|
7
|
+
setCanCreatePoll(pollComposer.canCreatePoll);
|
|
8
|
+
}), [pollComposer]);
|
|
9
|
+
return canCreatePoll;
|
|
10
|
+
};
|
|
@@ -1,8 +1,7 @@
|
|
|
1
|
-
import React from 'react';
|
|
2
|
-
import type { DefaultStreamChatGenerics } from '../../../types/types';
|
|
1
|
+
import type React from 'react';
|
|
3
2
|
export type CooldownTimerState = {
|
|
4
3
|
cooldownInterval: number;
|
|
5
4
|
setCooldownRemaining: React.Dispatch<React.SetStateAction<number | undefined>>;
|
|
6
5
|
cooldownRemaining?: number;
|
|
7
6
|
};
|
|
8
|
-
export declare const useCooldownTimer:
|
|
7
|
+
export declare const useCooldownTimer: () => CooldownTimerState;
|
|
@@ -1,3 +1,2 @@
|
|
|
1
1
|
import type { MessageInputContextValue } from '../../../context/MessageInputContext';
|
|
2
|
-
|
|
3
|
-
export declare const useCreateMessageInputContext: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(value: MessageInputContextValue<StreamChatGenerics, V>) => MessageInputContextValue<StreamChatGenerics, V>;
|
|
2
|
+
export declare const useCreateMessageInputContext: (value: MessageInputContextValue) => MessageInputContextValue;
|
|
@@ -1,97 +1,43 @@
|
|
|
1
1
|
import { useMemo } from 'react';
|
|
2
2
|
export const useCreateMessageInputContext = (value) => {
|
|
3
|
-
const { additionalTextareaProps, asyncMessagesMultiSendEnabled,
|
|
4
|
-
const editing = message?.editing;
|
|
5
|
-
const linkPreviewsValue = Array.from(linkPreviews.values()).join();
|
|
6
|
-
const mentionedUsersLength = mentioned_users.length;
|
|
3
|
+
const { additionalTextareaProps, asyncMessagesMultiSendEnabled, audioRecordingEnabled, clearEditingState, cooldownInterval, cooldownRemaining, emojiSearchIndex, focus, grow, handleSubmit, hideSendButton, insertText, isThreadInput, maxRows, minRows, onPaste, parent, recordingController, setCooldownRemaining, shouldSubmit, textareaRef, } = value;
|
|
7
4
|
const parentId = parent?.id;
|
|
8
5
|
const messageInputContext = useMemo(() => ({
|
|
9
6
|
additionalTextareaProps,
|
|
10
7
|
asyncMessagesMultiSendEnabled,
|
|
11
|
-
attachments,
|
|
12
8
|
audioRecordingEnabled,
|
|
13
|
-
autocompleteTriggers,
|
|
14
|
-
cancelURLEnrichment,
|
|
15
9
|
clearEditingState,
|
|
16
|
-
closeCommandsList,
|
|
17
|
-
closeMentionsList,
|
|
18
10
|
cooldownInterval,
|
|
19
11
|
cooldownRemaining,
|
|
20
|
-
disabled,
|
|
21
|
-
disableMentions,
|
|
22
|
-
dismissLinkPreview,
|
|
23
|
-
doFileUploadRequest,
|
|
24
|
-
doImageUploadRequest,
|
|
25
12
|
emojiSearchIndex,
|
|
26
|
-
errorHandler,
|
|
27
|
-
findAndEnqueueURLsToEnrich,
|
|
28
13
|
focus,
|
|
29
14
|
grow,
|
|
30
|
-
handleChange,
|
|
31
15
|
handleSubmit,
|
|
32
16
|
hideSendButton,
|
|
33
17
|
insertText,
|
|
34
18
|
isThreadInput,
|
|
35
|
-
isUploadEnabled,
|
|
36
|
-
linkPreviews,
|
|
37
|
-
maxFilesLeft,
|
|
38
19
|
maxRows,
|
|
39
|
-
mentionAllAppUsers,
|
|
40
|
-
mentioned_users,
|
|
41
|
-
mentionQueryParams,
|
|
42
|
-
message,
|
|
43
20
|
minRows,
|
|
44
|
-
noFiles,
|
|
45
|
-
numberOfUploads,
|
|
46
21
|
onPaste,
|
|
47
|
-
onSelectUser,
|
|
48
|
-
openCommandsList,
|
|
49
|
-
openMentionsList,
|
|
50
|
-
overrideSubmitHandler,
|
|
51
22
|
parent,
|
|
52
|
-
publishTypingEvent,
|
|
53
23
|
recordingController,
|
|
54
|
-
removeAttachments,
|
|
55
24
|
setCooldownRemaining,
|
|
56
|
-
setText,
|
|
57
25
|
shouldSubmit,
|
|
58
|
-
showCommandsList,
|
|
59
|
-
showMentionsList,
|
|
60
|
-
text,
|
|
61
26
|
textareaRef,
|
|
62
|
-
uploadAttachment,
|
|
63
|
-
uploadNewFiles,
|
|
64
|
-
upsertAttachments,
|
|
65
|
-
useMentionsTransliteration,
|
|
66
27
|
}),
|
|
67
28
|
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
68
29
|
[
|
|
69
30
|
asyncMessagesMultiSendEnabled,
|
|
70
|
-
attachments,
|
|
71
31
|
audioRecordingEnabled,
|
|
72
|
-
cancelURLEnrichment,
|
|
73
32
|
cooldownInterval,
|
|
74
33
|
cooldownRemaining,
|
|
75
|
-
dismissLinkPreview,
|
|
76
|
-
editing,
|
|
77
34
|
emojiSearchIndex,
|
|
78
|
-
findAndEnqueueURLsToEnrich,
|
|
79
35
|
handleSubmit,
|
|
80
36
|
hideSendButton,
|
|
81
|
-
isUploadEnabled,
|
|
82
37
|
isThreadInput,
|
|
83
|
-
linkPreviewsValue,
|
|
84
|
-
mentionedUsersLength,
|
|
85
38
|
minRows,
|
|
86
39
|
parentId,
|
|
87
|
-
publishTypingEvent,
|
|
88
40
|
recordingController,
|
|
89
|
-
removeAttachments,
|
|
90
|
-
showCommandsList,
|
|
91
|
-
showMentionsList,
|
|
92
|
-
text,
|
|
93
|
-
uploadAttachment,
|
|
94
|
-
upsertAttachments,
|
|
95
41
|
]);
|
|
96
42
|
return messageInputContext;
|
|
97
43
|
};
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { useEffect, useMemo } from 'react';
|
|
2
|
+
import { FixedSizeQueueCache, MessageComposer } from 'stream-chat';
|
|
3
|
+
import { useThreadContext } from '../../Threads';
|
|
4
|
+
import { useChannelStateContext, useChatContext, useMessageContext, } from '../../../context';
|
|
5
|
+
import { useLegacyThreadContext } from '../../Thread';
|
|
6
|
+
const queueCache = new FixedSizeQueueCache(64);
|
|
7
|
+
export const useMessageComposer = () => {
|
|
8
|
+
const { client } = useChatContext();
|
|
9
|
+
const { channel } = useChannelStateContext();
|
|
10
|
+
const { editing, message: editedMessage } = useMessageContext();
|
|
11
|
+
// legacy thread will receive new composer
|
|
12
|
+
const { legacyThread: parentMessage } = useLegacyThreadContext();
|
|
13
|
+
const threadInstance = useThreadContext();
|
|
14
|
+
const cachedEditedMessage = useMemo(() => {
|
|
15
|
+
if (!editedMessage)
|
|
16
|
+
return undefined;
|
|
17
|
+
return editedMessage;
|
|
18
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
19
|
+
}, [editedMessage?.id]);
|
|
20
|
+
const cachedParentMessage = useMemo(() => {
|
|
21
|
+
if (!parentMessage)
|
|
22
|
+
return undefined;
|
|
23
|
+
return parentMessage;
|
|
24
|
+
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
25
|
+
}, [parentMessage?.id]);
|
|
26
|
+
// composer hierarchy
|
|
27
|
+
// edited message (always new) -> thread instance (own) -> thread message (always new) -> channel (own)
|
|
28
|
+
// editedMessage ?? thread ?? parentMessage ?? channel;
|
|
29
|
+
const messageComposer = useMemo(() => {
|
|
30
|
+
if (editing && cachedEditedMessage) {
|
|
31
|
+
const tag = MessageComposer.constructTag(cachedEditedMessage);
|
|
32
|
+
const cachedComposer = queueCache.get(tag);
|
|
33
|
+
if (cachedComposer)
|
|
34
|
+
return cachedComposer;
|
|
35
|
+
return new MessageComposer({
|
|
36
|
+
client,
|
|
37
|
+
composition: cachedEditedMessage,
|
|
38
|
+
compositionContext: cachedEditedMessage,
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
else if (threadInstance) {
|
|
42
|
+
return threadInstance.messageComposer;
|
|
43
|
+
}
|
|
44
|
+
else if (cachedParentMessage) {
|
|
45
|
+
const compositionContext = {
|
|
46
|
+
...cachedParentMessage,
|
|
47
|
+
legacyThreadId: cachedParentMessage.id,
|
|
48
|
+
};
|
|
49
|
+
const tag = MessageComposer.constructTag(compositionContext);
|
|
50
|
+
const cachedComposer = queueCache.get(tag);
|
|
51
|
+
if (cachedComposer)
|
|
52
|
+
return cachedComposer;
|
|
53
|
+
return new MessageComposer({
|
|
54
|
+
client,
|
|
55
|
+
compositionContext,
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
return channel.messageComposer;
|
|
60
|
+
}
|
|
61
|
+
}, [
|
|
62
|
+
cachedEditedMessage,
|
|
63
|
+
cachedParentMessage,
|
|
64
|
+
channel,
|
|
65
|
+
client,
|
|
66
|
+
editing,
|
|
67
|
+
threadInstance,
|
|
68
|
+
]);
|
|
69
|
+
if (['legacy_thread', 'message'].includes(messageComposer.contextType) &&
|
|
70
|
+
!queueCache.peek(messageComposer.tag)) {
|
|
71
|
+
queueCache.add(messageComposer.tag, messageComposer);
|
|
72
|
+
}
|
|
73
|
+
useEffect(() => {
|
|
74
|
+
const unsubscribe = messageComposer.registerSubscriptions();
|
|
75
|
+
return () => {
|
|
76
|
+
unsubscribe();
|
|
77
|
+
};
|
|
78
|
+
}, [messageComposer]);
|
|
79
|
+
return messageComposer;
|
|
80
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const useMessageComposerHasSendableData: () => boolean;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { useMessageComposer } from './useMessageComposer';
|
|
2
|
+
import { useStateStore } from '../../../store';
|
|
3
|
+
const editingAuditStateStateSelector = (state) => state;
|
|
4
|
+
export const useMessageComposerHasSendableData = () => {
|
|
5
|
+
const messageComposer = useMessageComposer();
|
|
6
|
+
useStateStore(messageComposer.editingAuditState, editingAuditStateStateSelector);
|
|
7
|
+
return messageComposer.hasSendableData;
|
|
8
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
import type { RecordingController } from '../../MediaRecorder/hooks/useMediaRecorder';
|
|
3
|
+
import type { UpdatedMessage } from 'stream-chat';
|
|
4
|
+
import type { MessageInputProps } from '../MessageInput';
|
|
5
|
+
export type MessageInputHookProps = {
|
|
6
|
+
handleSubmit: (event?: React.BaseSyntheticEvent, customMessageData?: Omit<UpdatedMessage, 'mentioned_users'>) => void;
|
|
7
|
+
insertText: (textToInsert: string) => void;
|
|
8
|
+
onPaste: (event: React.ClipboardEvent<HTMLTextAreaElement>) => void;
|
|
9
|
+
recordingController: RecordingController;
|
|
10
|
+
textareaRef: React.MutableRefObject<HTMLTextAreaElement | null | undefined>;
|
|
11
|
+
};
|
|
12
|
+
export declare const useMessageInputControls: (props: MessageInputProps) => MessageInputHookProps;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { useMessageInputText } from './useMessageInputText';
|
|
2
|
+
import { useSubmitHandler } from './useSubmitHandler';
|
|
3
|
+
import { usePasteHandler } from './usePasteHandler';
|
|
4
|
+
import { useMediaRecorder } from '../../MediaRecorder/hooks/useMediaRecorder';
|
|
5
|
+
export const useMessageInputControls = (props) => {
|
|
6
|
+
const { asyncMessagesMultiSendEnabled, audioRecordingConfig, audioRecordingEnabled } = props;
|
|
7
|
+
const { insertText, textareaRef } = useMessageInputText(props);
|
|
8
|
+
const { handleSubmit } = useSubmitHandler(props);
|
|
9
|
+
const recordingController = useMediaRecorder({
|
|
10
|
+
asyncMessagesMultiSendEnabled,
|
|
11
|
+
enabled: !!audioRecordingEnabled,
|
|
12
|
+
handleSubmit,
|
|
13
|
+
recordingConfig: audioRecordingConfig,
|
|
14
|
+
});
|
|
15
|
+
const { onPaste } = usePasteHandler(insertText);
|
|
16
|
+
return {
|
|
17
|
+
handleSubmit,
|
|
18
|
+
insertText,
|
|
19
|
+
onPaste,
|
|
20
|
+
recordingController,
|
|
21
|
+
textareaRef,
|
|
22
|
+
};
|
|
23
|
+
};
|
|
@@ -1,10 +1,6 @@
|
|
|
1
1
|
/// <reference types="react" />
|
|
2
|
-
import type { MessageInputReducerAction, MessageInputState } from './useMessageInputState';
|
|
3
2
|
import type { MessageInputProps } from '../MessageInput';
|
|
4
|
-
|
|
5
|
-
import type { EnrichURLsController } from './useLinkPreviews';
|
|
6
|
-
export declare const useMessageInputText: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>, state: MessageInputState<StreamChatGenerics>, dispatch: React.Dispatch<MessageInputReducerAction<StreamChatGenerics>>, findAndEnqueueURLsToEnrich?: EnrichURLsController['findAndEnqueueURLsToEnrich']) => {
|
|
7
|
-
handleChange: import("react").ChangeEventHandler<HTMLTextAreaElement>;
|
|
3
|
+
export declare const useMessageInputText: (props: MessageInputProps) => {
|
|
8
4
|
insertText: (textToInsert: string) => void;
|
|
9
5
|
textareaRef: import("react").RefObject<HTMLTextAreaElement | undefined>;
|
|
10
6
|
};
|
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import { useCallback, useEffect, useRef } from 'react';
|
|
2
|
-
import {
|
|
3
|
-
import {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
2
|
+
import { useMessageComposer } from './useMessageComposer';
|
|
3
|
+
import { useStateStore } from '../../../store';
|
|
4
|
+
const messageComposerStateSelector = (state) => ({
|
|
5
|
+
text: state.text,
|
|
6
|
+
});
|
|
7
|
+
export const useMessageInputText = (props) => {
|
|
8
|
+
const { focus } = props;
|
|
9
|
+
const messageComposer = useMessageComposer();
|
|
8
10
|
const textareaRef = useRef(undefined);
|
|
11
|
+
const { text } = useStateStore(messageComposer.textComposer.state, messageComposerStateSelector);
|
|
9
12
|
// Focus
|
|
10
13
|
useEffect(() => {
|
|
11
14
|
if (focus && textareaRef.current) {
|
|
@@ -15,36 +18,17 @@ export const useMessageInputText = (props, state, dispatch, findAndEnqueueURLsTo
|
|
|
15
18
|
// Text + cursor position
|
|
16
19
|
const newCursorPosition = useRef(undefined);
|
|
17
20
|
const insertText = useCallback((textToInsert) => {
|
|
18
|
-
const
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
}
|
|
26
|
-
return updatedText;
|
|
27
|
-
},
|
|
28
|
-
type: 'setText',
|
|
29
|
-
});
|
|
30
|
-
}
|
|
31
|
-
const { selectionEnd, selectionStart } = textareaRef.current;
|
|
32
|
-
newCursorPosition.current = selectionStart + textToInsert.length;
|
|
33
|
-
dispatch({
|
|
34
|
-
getNewText: (prevText) => {
|
|
35
|
-
const updatedText = prevText.slice(0, selectionStart) +
|
|
36
|
-
textToInsert +
|
|
37
|
-
prevText.slice(selectionEnd);
|
|
38
|
-
if (maxLength && updatedText.length > maxLength) {
|
|
39
|
-
return updatedText.slice(0, maxLength);
|
|
40
|
-
}
|
|
41
|
-
return updatedText;
|
|
42
|
-
},
|
|
43
|
-
type: 'setText',
|
|
21
|
+
const selection = textareaRef?.current && {
|
|
22
|
+
end: textareaRef.current.selectionEnd,
|
|
23
|
+
start: textareaRef.current.selectionStart,
|
|
24
|
+
};
|
|
25
|
+
messageComposer.textComposer.insertText({
|
|
26
|
+
selection,
|
|
27
|
+
text: textToInsert,
|
|
44
28
|
});
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
[
|
|
29
|
+
if (selection)
|
|
30
|
+
newCursorPosition.current = selection.start + textToInsert.length;
|
|
31
|
+
}, [messageComposer, newCursorPosition, textareaRef]);
|
|
48
32
|
useEffect(() => {
|
|
49
33
|
const textareaElement = textareaRef.current;
|
|
50
34
|
if (textareaElement && newCursorPosition.current !== undefined) {
|
|
@@ -53,25 +37,7 @@ export const useMessageInputText = (props, state, dispatch, findAndEnqueueURLsTo
|
|
|
53
37
|
newCursorPosition.current = undefined;
|
|
54
38
|
}
|
|
55
39
|
}, [text, newCursorPosition]);
|
|
56
|
-
const handleChange = useCallback((event) => {
|
|
57
|
-
event.preventDefault();
|
|
58
|
-
if (!event || !event.target) {
|
|
59
|
-
return;
|
|
60
|
-
}
|
|
61
|
-
const newText = event.target.value;
|
|
62
|
-
dispatch({
|
|
63
|
-
getNewText: () => newText,
|
|
64
|
-
type: 'setText',
|
|
65
|
-
});
|
|
66
|
-
findAndEnqueueURLsToEnrich?.(newText);
|
|
67
|
-
if (publishTypingEvent && newText && channel) {
|
|
68
|
-
logChatPromiseExecution(channel.keystroke(parent?.id), 'start typing event');
|
|
69
|
-
}
|
|
70
|
-
},
|
|
71
|
-
// eslint-disable-next-line react-hooks/exhaustive-deps
|
|
72
|
-
[channel, findAndEnqueueURLsToEnrich, parent, publishTypingEvent]);
|
|
73
40
|
return {
|
|
74
|
-
handleChange,
|
|
75
41
|
insertText,
|
|
76
42
|
textareaRef,
|
|
77
43
|
};
|
|
@@ -1,5 +1,3 @@
|
|
|
1
|
-
|
|
2
|
-
import type { EnrichURLsController } from './useLinkPreviews';
|
|
3
|
-
export declare const usePasteHandler: (uploadNewFiles: (files: FileList | FileLike[] | File[]) => void, insertText: (textToInsert: string) => void, isUploadEnabled: boolean, findAndEnqueueURLsToEnrich?: EnrichURLsController['findAndEnqueueURLsToEnrich']) => {
|
|
1
|
+
export declare const usePasteHandler: (insertText: (textToInsert: string) => void) => {
|
|
4
2
|
onPaste: (clipboardEvent: React.ClipboardEvent<HTMLTextAreaElement>) => void;
|
|
5
3
|
};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { useCallback } from 'react';
|
|
2
|
+
import { useMessageComposer } from './useMessageComposer';
|
|
2
3
|
import { dataTransferItemsToFiles } from '../../ReactFileUtilities';
|
|
3
|
-
|
|
4
|
-
|
|
4
|
+
export const usePasteHandler = (insertText) => {
|
|
5
|
+
const { attachmentManager } = useMessageComposer();
|
|
5
6
|
const onPaste = useCallback((clipboardEvent) => {
|
|
6
7
|
(async (event) => {
|
|
7
8
|
const { items } = event.clipboardData;
|
|
@@ -25,14 +26,11 @@ export const usePasteHandler = (uploadNewFiles, insertText, isUploadEnabled, fin
|
|
|
25
26
|
if (plainTextPromise) {
|
|
26
27
|
const pastedText = await plainTextPromise;
|
|
27
28
|
insertText(pastedText);
|
|
28
|
-
findAndEnqueueURLsToEnrich?.(pastedText, SetLinkPreviewMode.UPSERT);
|
|
29
|
-
findAndEnqueueURLsToEnrich?.flush();
|
|
30
29
|
}
|
|
31
|
-
else
|
|
32
|
-
|
|
33
|
-
return;
|
|
30
|
+
else {
|
|
31
|
+
attachmentManager.uploadFiles(fileLikes);
|
|
34
32
|
}
|
|
35
33
|
})(clipboardEvent);
|
|
36
|
-
}, [
|
|
34
|
+
}, [attachmentManager, insertText]);
|
|
37
35
|
return { onPaste };
|
|
38
36
|
};
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
import type { Message } from 'stream-chat';
|
|
2
|
-
import type { MessageInputReducerAction, MessageInputState } from './useMessageInputState';
|
|
3
1
|
import type { MessageInputProps } from '../MessageInput';
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
export declare const useSubmitHandler: <StreamChatGenerics extends DefaultStreamChatGenerics = DefaultStreamChatGenerics, V extends CustomTrigger = CustomTrigger>(props: MessageInputProps<StreamChatGenerics, V>, state: MessageInputState<StreamChatGenerics>, dispatch: React.Dispatch<MessageInputReducerAction<StreamChatGenerics>>, numberOfUploads: number, enrichURLsController: EnrichURLsController) => {
|
|
7
|
-
handleSubmit: (event?: React.BaseSyntheticEvent, customMessageData?: Partial<Message<StreamChatGenerics>>, options?: SendMessageOptions) => Promise<void>;
|
|
2
|
+
export declare const useSubmitHandler: (props: MessageInputProps) => {
|
|
3
|
+
handleSubmit: (event?: React.BaseSyntheticEvent) => Promise<void>;
|
|
8
4
|
};
|