Message

The Message component is a React Context provider that wraps all the logic, functionality, and UI for the individual messages displayed in a message list. It provides the MessageContext to its children. All the message UI components consume the MessageContext and rely on the stored data for their display and interaction.

The majority of Stream Chat use cases will not need to use the Message component directly. We’ve documented it here for reference, but it’s primarily used internally to build up the MessageContext. A custom message UI component, added onto Channel or MessageList via the Message prop, will consume this context, so Message likely doesn’t need to be imported into your app.

Basic Usage

The Message component is used internally as part of the logic of the MessageList. The MessageList renders a list of messages and passes each individual message object into a Message component. Since the component is used internally by default, it only needs to be explicitly imported from the library and used in unique use cases.

UI Customization

The Message component does not inject any UI, so all message customization is handled by the Message UI component. The Message UI component is passed as the Message prop into either the Channel or MessageList component.

Props

message

The StreamChat message object, which provides necessary data to the underlying UI components.

Type
object

additionalMessageInputProps

Additional props to be passed to the underlying MessageInput component, available props. It is rendered when editing a message.

Type
object

autoscrollToBottom

Call this function to keep message list scrolled to the bottom when the message list container scroll height increases (only available in the VirtualizedMessageList). An example use case is that upon user’s interaction with the application, a new element appears below the last message. In order to keep the newly rendered content visible, the autoscrollToBottom function can be called. The container, however, is not scrolled to the bottom, if already scrolled up more than 4px from the bottom. The function is provided by the SDK and is not inteded for customization.

Type
() => void

closeReactionSelectorOnClick

If true, picking a reaction from the ReactionSelector component will close the selector.

TypeDefault
booleanfalse

customMessageActions

An object containing custom message actions (key) and function handlers (value). For each custom action a dedicated item (button) in MessageActionsBox is rendered. The key is used as a display text inside the button. Therefore, it should not be cryptic but rather bear the end user in mind when formulating it.

const customActions = {
  'Copy text': (message) => {
    navigator.clipboard.writeText(message.text || '');
  },
};

<MessageList customMessageActions={customActions} />;

Custom action item “Copy text” in the message actions box:

Image of a custom action item

const customActions = {
  'Copy text': (message) => {
    navigator.clipboard.writeText(message.text || '');
  },
};

<MessageList customMessageActions={customActions} />;

Custom action item “Copy text” in the message actions box:

Image of a custom action item

Type
object

disableQuotedMessages

If true, disables the ability for users to quote messages.

TypeDefault
booleanfalse

endOfGroup

When true, the message is the last one in a group sent by a specific user (only used in the VirtualizedMessageList).

Type
boolean

firstOfGroup

When true, the message is the first one in a group sent by a specific user (only used in the VirtualizedMessageList).

Type
boolean

formatDate

Overrides the default date formatting logic, has access to the original date object.

Type
(date: Date) => string

getDeleteMessageErrorNotification

Function that returns the notification text to be displayed when a delete message request fails. This function receives the deleted message object as its argument.

Type
(message: StreamMessage) => string

getFetchReactionsErrorNotification

Function that returns the notification text to be displayed when loading message reactions fails. This function receives the current message object as its argument.

Type
(message: StreamMessage) => string

getFlagMessageErrorNotification

Function that returns the notification text to be displayed when a flag message request fails. This function receives the flagged message object as its argument.

Type
(message: StreamMessage) => string

getFlagMessageSuccessNotification

Function that returns the notification text to be displayed when a flag message request succeeds. This function receives the flagged message object as its argument.

Type
(message: StreamMessage) => string

getMarkMessageUnreadErrorNotification

Function that returns the notification text to be displayed when a mark message unread request fails. This function receives the marked message object as its argument.

Type
(message: StreamMessage) => string

getMarkMessageUnreadSuccessNotification

Function that returns the notification text to be displayed when a mark message unread request succeeds. This function receives the marked message object as its argument.

Type
(message: StreamMessage) => string

getMuteUserErrorNotification

Function that returns the notification text to be displayed when a mute user request fails. This function receives the muted user object as its argument.

Type
(user: UserResponse) => string

getMuteUserSuccessNotification

Function that returns the notification text to be displayed when a mute user request succeeds. This function receives the muted user object as its argument.

Type
(user: UserResponse) => string

getPinMessageErrorNotification

Function that returns the notification text to be displayed when a pin message request fails. This function receives the pinned message object as its argument.

Type
(message: StreamMessage) => string

groupedByUser

If true, group messages sent by each user (only used in the VirtualizedMessageList).

TypeDefault
booleanfalse

groupStyles

An array of potential styles to apply to a grouped message (ex: top, bottom, single).

TypeOptions
string[]” | ‘middle’ | ‘top’ | ‘bottom’ | ‘single’

highlighted

Whether to highlight and focus the message on load. Used internally in the process of jumping to a message.

Type
boolean

initialMessage

When true, signifies the message is the parent message in a thread list.

TypeDefault
booleanfalse

lastReceivedId

The latest message ID in the current channel.

Type
string

Message

Custom UI component to display a message.

TypeDefault
componentMessageSimple

messageActions

Array of allowed message actions (ex: ‘edit’, ‘delete’, ‘reply’). To disable all actions, provide an empty array.

TypeDefault
array[‘edit’, ‘delete’, ‘flag’, ‘mute’, ‘pin’, ‘quote’, ‘react’, ‘reply’]

messageListRect

DOMRect object linked to the parent wrapper div around the InfiniteScroll component.

Type
DOMRect

onlySenderCanEdit

If true, only the sender of the message has editing privileges. If false also channel capability update-any-message has to be enabled in order a user can edit other users’ messages.

TypeDefault
booleanfalse

onMentionsClick

Custom action handler function to run on click of a @mention in a message.

onMentionsHover

Custom action handler function to run on hover over a @mention in a message.

onUserClick

Custom action handler function to run on click of user avatar.

Type
(event: React.BaseSyntheticEvent, user: User) => void

onUserHover

Custom action handler function to run on hover of user avatar.

Type
(event: React.BaseSyntheticEvent, user: User) => void

openThread

Custom action handler to open a Thread component.

pinPermissions

The user roles allowed to pin messages in various channel types (deprecated in favor of channelCapabilities).

TypeDefault
objectdefaultPinPermissions

readBy

An array of users that have read the current message.

Type
array

renderText

Custom function to render message text content.

TypeDefault
functionrenderText

retrySendMessage

Custom action handler to retry sending a message after a failed request.

reactionDetailsSort

Sort options to provide to a reactions query. Affects the order of reacted users in the default reactions modal.

TypeDefault
{ created_at: number }reverse chronological order

sortReactions

Comparator function to sort reactions. Should have the same signature as the sort method for a string array.

TypeDefault
(this: ReactionSummary, that: ReactionSummary) => numberchronological order

threadList

If true, indicates that the current MessageList component is part of a Thread.

TypeDefault
booleanfalse

unsafeHTML

If true, renders HTML instead of markdown. Posting HTML is only supported server-side.

TypeDefault
booleanfalse
© Getstream.io, Inc. All Rights Reserved.