Threads
Message threading is a feature that allows users to reply to each other's messages in a channel. Users can ask questions, give feedback or add context to a specific message without interrupting the conversation flow. A message thread refers to a group of messages and their replies. Sendbird UIKit supports two reply types: quote reply and threads. Threads allow users to start a separate conversation in a new thread screen when responding to a message. The reply message is also sent to the channel in the message list component.
Limitations
Threads currently have the following limitations:
- UIKit message threading is available for group channels and supergroup channels only.
- Sendbird UIKit only supports 1-depth threads, meaning you can't reply to messages that are already thread replies to a parent message.
How to use
To turn on thread mode, set the reply filter to THREAD:
Set ThreadReplySelectType
You have the option to set ThreadReplySelectType to PARENT or THREAD. This enum function allows you to direct your users to view either the parent message or the message thread when they click on a reply button in the group channel view.
Reply to messages
Users can reply to messages in a group or supergroup channel through the Channel module. To do so, click on the more options icon button next to the message you wish to reply to in the MessageList component of Channel module. Once you click Reply in thread, you can start replying in a new thread in the Thread module. A message that already has a reply is called a parent message and the replied message is called a reply. Both parent messages and replies can be either user message or file message.
The Message item menu contains an Emoji reaction bar, a Copy button, and a Reply in thread button. To view the menu, click on the more options icon button next to to the message you wish to reply to. Then, select Reply in thread in the menu to reply to the selected message in a new thread.
Like quote reply, threads only allow 1-depth threads. This means that users can’t reply to messages that are already thread replies to a parent message. The Reply in thread button of a message that’s already a thread reply appears as deactivated. Similarly, the Delete button of a parent message that has one or more replies in a thread appears as deactivated. To delete the parent message, its thread replies must be deleted first.
The UI for threads in the Message item menu can be customized through stringSet.
The following table shows a customizable property of stringSet that appears in the Message item menu.
| Key | String | Description |
|---|---|---|
MESSAGE_MENU__THREAD | Reply in thread | A text for the Reply in thread button in the Message item menu. |
Thread
Once the current user selects Reply in thread in the Message menu, they can start a new thread in the Thread module. The thread module has six UI components: ThreadUI, ThreadHeader, ParentMessageInfo, ThreadList, ThreadListItem, and ThreadMessageInput.
ThreadHeader shows the title of the thread view, which says Thread by default. Below the title, there's a text button that indicates the name of the channel that the thread belongs to. When a user clicks the button, they can view the corresponding parent message in the Channel module.
In ParentMessageInfo, the parent message of the thread is displayed and below the component, in ThreadList and ThreadListItem, users can see the number of replies in the thread and a list of all replies to that message are shown in a chronological order. ThreadMessageInput is where the user can send either a text message or a file message as a reply to the parent message. The placeholder text in the message input field changes depending on whether the parent message has an existing thread or not. If the parent message already has one or more thread replies, the default placeholder text is Reply to thread. If the parent message has no existing replies, the placeholder text is Reply in thread.
Customize ThreadUI
The UI for threads in the ThreadHeader component and the ThreadMessageInput component of the ThreadUI can be customized through stringSet.
String set for thread
The following table shows customizable properties of stringSet that appear in the ThreadHeader and ThreadMessageInput components.
| Key | String | Description |
|---|---|---|
THREAD__HEADER_TITLE | Thread | A text for the title of the thread view. |
THREADINPUTREPLY_IN_THREAD | Reply in thread | A placeholder text in the |
THREADINPUTREPLY_TO_THREAD | Reply to thread | A placeholder text in the |
Show replies
Users can view reply messages in both the Thread module and Channel module because all replies sent to a thread also get sent to the channel automatically. In the Thread module, replies are shown chronologically in the ThreadList component with the current user’s replies shown on the right and channel members’ replies shown on the left of the view by default. In the Channel module, the thread replies sent to the channel are displayed the same way as quoted messages in quote reply mode.
Thread list
In thread view, the parent message and its reaction emojis are displayed in the ParentMessageInfo component. Meanwhile in ThreadList and ThreadListItem, the number of replies in the thread and a list of all replies to that message are shown in a chronological order. Both the parent message and the reply can be a text or file message. By default, the replies sent by the current user are displayed on the right side of the screen and the message bubble is purple.
Customize the UI in thread list
The UI for threads in ThreadList and ThreadListItem of ThreadUI can be customized through stringSet.
String set for thread list
The following table shows customizable properties of stringSet that appear in ThreadList and ThreadListItem.
| Key | String | Description |
|---|---|---|
THREAD__THREAD_REPLY | reply | A text that indicates that a parent message has one reply in the thread. |
THREAD__THREAD_REPLIES | replies | A text that indicates that a parent message has more than one replies in the thread. |
MESSAGE_MENU__OPEN_IN_CHANNEL | View in channel | A text in the Message menu for a parent message that allows the user to view the parent message in the |
Group channel
In ChannelUI, all parent messages with a thread have a ThreadReplies component that displays the number of thread replies and up to four profile images of users who responded in the thread. The ThreadReplies is a UI component that doesn't inherit a provider and can be used freely between different modules.
Since all replies sent to a thread also get sent to the channel automatically, the thread replies are shown in the channel as quoted messages in quote reply mode. Users can view these replies through the QuotedMessage component of the Channel module, which shows the parent message and a text that indicates a user replied to another channel member. For all reply messages, a parentMessage property exists within the message property. message is used to render the MessageItem component, while parentMessage is used to render the QuotedMessage component.
Customize the UI in group channel
You can render a custom view of replies through the renderMessage property of Channel. By using the message parameter of renderMessage, you can also access the parentMessage property inside message. Through the parentMessage property, you can customize the QuotedMessage component. Refer to the code below:
String set for group channel
The following table shows customizable properties of stringSet that appear in the ChannelUI.
| Key | String | Description |
|---|---|---|
CHANNEL__THREAD_REPLY | reply | A text that indicates that a parent message has one reply in the thread. |
CHANNEL__THREAD_REPLIES | replies | A text that indicates that a parent message has more than one replies in the thread. |
QUOTED_MESSAGE__CURRENT_USER | You | A text that indicates the current user. |
QUOTED_MESSAGE__REPLIED_TO | replied to | A text that indicates to whom a user replied to. |
CHANNEL__THREAD_OVER_MAX | 99+ replies | A text that indicates that a parent message has more than 99 replies in the thread. |
QUOTED_MESSAGE__UNAVAILABLE | Message unavailable | A text that indicates that the current user can't view the parent message because it was sent before the user joined the channel. |