Skip to content

feat: message composer #2669

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 107 commits into from
Apr 28, 2025
Merged

feat: message composer #2669

merged 107 commits into from
Apr 28, 2025

Conversation

MartinCupela
Copy link
Contributor

@MartinCupela MartinCupela commented Mar 13, 2025

🎯 Goal

Provide a message composition API supported by reactive state layer from stream-chat. The message composition logic has been moved to stream-chat. The logic kept in stream-chat-react is related only to the browser event handling.

Depends on:

🛠 Implementation details

The message composition now relies on MessageComposer instance. The instance is available for the channel message list, thread message list and for editing a specific message. The MessageComposer instance should be accessed via useMessageComposer hook, that identifies the correct context (channel, thread, message).

🎨 UI Changes

No changes

BREAKING CHANGE: Channel props dragAndDropWindow & optionalMessageInputProps have been removed, use WithDragAndDropUpload component instead (#2688)
BREAKING CHANGE: Attachment identity functions moved to stream-chat-js (e.g. isFileAttachment...)
BREAKING CHANGE: Remove ChatAutoComplete, AutoCompleteTextarea, DefaultSuggestionList, DefaultSuggestionListItem and introduce TextareaComposer, SuggestionList, SuggestionListItem
BREAKING CHANGE: Remove defaultScrollToItem function previously used by SuggestionList
BREAKING CHANGE: Removed DefaultTriggerProvider component
BREAKING CHANGE: Remove from Channel props - acceptedFiles, enrichURLForPreview, enrichURLForPreviewConfig, maxNumberOfFiles, multipleUploads, TriggerProvider
BREAKING CHANGE: Removal of acceptedFiles, debounceURLEnrichmentMs, enrichURLForPreview, findURLFn, multipleUploads, onLinkPreviewDismissed, quotedMessage from ChannelStateContext
BREAKING CHANGE: Changed signature for functions sendMessage and editMessage in ChannelActionContext
BREAKING CHANGE: Changed signature for handleSubmit
BREAKING CHANGE: Removed setQuotedMessage from ChannelActionContext
BREAKING CHANGE: Removed types MessageToSend, StreamMessage, UpdatedMessage in favor of LocalMessage or RenderedMessage
BREAKING CHANGE: Removed Trigger generics from ChannelProps
BREAKING CHANGE: Message input state as well as the API is now kept within MessageComposer instead of MessageInputContext
BREAKING CHANGE: Renamed useMessageInputState to useMessageInputControls as it does not handle the composition state anymore
BREAKING CHANGE: Removed from MessageInputProps - disabled, disableMentions, doFileUploadRequest, doImageUploadRequest, errorHandler, getDefaultValue, mentionAllAppUsers, mentionQueryParams, message, noFiles, urlEnrichmentConfig, useMentionsTransliteration, additionalTextareaProps do not expect default value anymore
BREAKING CHANGE: Changed the signature of MessageInput prop overrideSubmitHandler
BREAKING CHANGE: Local attachment and link preview types moved to stream-chat
BREAKING CHANGE: The SuggestionListItem UI components for TextareaComposer receive tokenizedDisplayName instead of itemNameParts
BREAKING CHANGE: Removed duplicate types SendMessageOptions, UpdateMessageOptions which should be imported from stream-chat instead
BREAKING CHANGE: Removed type LinkPreviewListProps - LinkPreviewList does not have any props anymore

@MartinCupela MartinCupela changed the title Feat/message composer feat: message composer Mar 13, 2025
@MartinCupela MartinCupela marked this pull request as draft March 13, 2025 12:14
@MartinCupela MartinCupela force-pushed the feat/message-composer branch 2 times, most recently from 41fe189 to 98fe4f2 Compare March 13, 2025 12:36
@arnautov-anton arnautov-anton force-pushed the feat/message-composer branch from dc919e7 to 0a7dc0f Compare March 13, 2025 12:44
@arnautov-anton arnautov-anton force-pushed the feat/message-composer branch from 0a7dc0f to 991b070 Compare March 13, 2025 14:09
github-actions bot pushed a commit to GetStream/stream-chat-js that referenced this pull request Apr 28, 2025
## [9.0.0-rc.11](v9.0.0-rc.10...v9.0.0-rc.11) (2025-04-28)

### ⚠ BREAKING CHANGES

* Replacement of FormatMessageResponse with LocalMessage
type

### Bug Fixes

* [REACT-344] remove Agora & 100ms integrations ([#1519](#1519)) ([16cd81a](16cd81a))
* [REACT-350] make archived_at & pinned_at nullable ([#1515](#1515)) ([318825a](318825a))
* [REACT-353] unify pinned_at & archived_at nullish values ([#1516](#1516)) ([a840226](a840226)), closes [#1515](#1515)

### Features

* [CHA-794] Add sort and filter param to queryThreads ([#1511](#1511)) ([ea7fe99](ea7fe99))
* [CHA-855] - Refactoring partial update member ([#1517](#1517)) ([e4f7e68](e4f7e68))
* message composer ([#1495](#1495)) ([0c07524](0c07524)), closes [stream-chat-react#2669](GetStream/stream-chat-react#2669)
MartinCupela added a commit to GetStream/stream-chat-css that referenced this pull request Apr 28, 2025
Copy link

codecov bot commented Apr 28, 2025

Codecov Report

Attention: Patch coverage is 91.99134% with 37 lines in your changes missing coverage. Please review.

Project coverage is 81.87%. Comparing base (a88e145) to head (0c216b6).
Report is 10 commits behind head on rc.

Files with missing lines Patch % Lines
src/components/MessageInput/EditMessageForm.tsx 79.16% 5 Missing ⚠️
...ponents/Poll/PollCreationDialog/OptionFieldSet.tsx 70.58% 5 Missing ⚠️
src/components/MessageList/utils.ts 82.35% 3 Missing ⚠️
...nts/Poll/PollCreationDialog/PollCreationDialog.tsx 82.35% 2 Missing and 1 partial ⚠️
src/components/MessageInput/MessageInput.tsx 89.47% 2 Missing ⚠️
...c/components/MessageInput/QuotedMessagePreview.tsx 89.47% 1 Missing and 1 partial ⚠️
.../components/MessageInput/hooks/useSubmitHandler.ts 91.30% 2 Missing ⚠️
...s/MessageList/VirtualizedMessageListComponents.tsx 66.66% 2 Missing ⚠️
...geList/useUnreadMessagesNotificationVirtualized.ts 71.42% 0 Missing and 2 partials ⚠️
src/components/MessageList/renderMessages.tsx 66.66% 0 Missing and 2 partials ⚠️
... and 9 more
Additional details and impacted files
@@            Coverage Diff             @@
##               rc    #2669      +/-   ##
==========================================
+ Coverage   81.01%   81.87%   +0.85%     
==========================================
  Files         470      462       -8     
  Lines        9925     9185     -740     
  Branches     2413     2096     -317     
==========================================
- Hits         8041     7520     -521     
- Misses       1498     1560      +62     
+ Partials      386      105     -281     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@MartinCupela MartinCupela merged commit fa2519b into rc Apr 28, 2025
5 checks passed
@MartinCupela MartinCupela deleted the feat/message-composer branch April 28, 2025 21:54
github-actions bot pushed a commit that referenced this pull request Apr 28, 2025
## [13.0.0-rc.1](v12.14.0...v13.0.0-rc.1) (2025-04-28)

### ⚠ BREAKING CHANGES

* `Channel` props `dragAndDropWindow` &
`optionalMessageInputProps` have been removed, use
* Remove ChatAutoComplete, AutoCompleteTextarea,
DefaultSuggestionList, DefaultSuggestionListItem and introduce
TextareaComposer, SuggestionList, SuggestionListItem
* Remove defaultScrollToItem function previously used by
SuggestionList
* Removed DefaultTriggerProvider component
* Remove from Channel props - acceptedFiles,
enrichURLForPreview, enrichURLForPreviewConfig, maxNumberOfFiles,
multipleUploads, TriggerProvider
* Removal of acceptedFiles, debounceURLEnrichmentMs,
enrichURLForPreview, findURLFn, multipleUploads, onLinkPreviewDismissed,
quotedMessage from ChannelStateContext
* Changed signature for functions sendMessage and
editMessage in ChannelActionContext
* Changed signature for handleSubmit
* Removed setQuotedMessage from ChannelActionContext
* Removed types MessageToSend, StreamMessage,
UpdatedMessage in favor of LocalMessage or RenderedMessage
* Removed Trigger generics from ChannelProps
* Message input state as well as the API is now kept
within MessageComposer instead of MessageInputContext
* Renamed useMessageInputState to useMessageInputControls
as it does not handle the composition state anymore
* Removed from MessageInputProps - disabled,
disableMentions, doFileUploadRequest, doImageUploadRequest,
errorHandler, getDefaultValue, mentionAllAppUsers, mentionQueryParams,
message, noFiles, urlEnrichmentConfig, useMentionsTransliteration,
additionalTextareaProps do not expect default value anymore
* Changed the signature of MessageInput prop
overrideSubmitHandler
* Local attachment and link preview types moved to
stream-chat
* The SuggestionListItem UI components for
TextareaComposer receive tokenizedDisplayName instead of itemNameParts
* Removed duplicate types SendMessageOptions,
UpdateMessageOptions which should be imported from stream-chat instead
* Removed type LinkPreviewListProps - LinkPreviewList
does not have any props anymore
* dropped `StreamChatGenerics`, use `Custom<Entity>Data`
to extend your types

### Bug Fixes

* replace StreamChatGenerics with module augmentation ([#2634](#2634)) ([67bed79](67bed79))

### Features

* default data interfaces ([#2683](#2683)) ([a88e145](a88e145))
* introduce WithDragAndDropUpload component ([#2688](#2688)) ([6b03abd](6b03abd))
* message composer ([#2669](#2669)) ([fa2519b](fa2519b)), closes [#2688](#2688)

### Chores

* **deps:** upgrade @stream-io/stream-chat-css to v5.8.1 ([#2689](#2689)) ([d0c32e3](d0c32e3))

### Refactors

* simplify WithDragAndDropUpload API ([#2691](#2691)) ([46c9add](46c9add))
@stream-ci-bot
Copy link

🎉 This PR is included in version 13.0.0-rc.1 🎉

The release is available on:

Your semantic-release bot 📦🚀

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

3 participants