Releases: sendbird/sendbird-uikit-react
[v3.15.6] (Oct 11th, 2024)
Features:
- Exported
useLocalization
Hook:- Provided access to stringSet and dateLocale.
- Note: Required SendbirdProvider to wrap your component for proper usage.
- Import Path:
"@sendbird/uikit-react/hooks/useLocalization"
- Exported
ThreadReplySelectType
:- Import Paths:
"@sendbird/uikit-react/Channel/context"
"@sendbird/uikit-react/GroupChannel/context"
- Import Paths:
Fixes
- Modified the
MessageInput
to scroll to the caret position when pasting text. - The maximum height of the
MessageInput
has been extended to'92px'
- Fixed an
error message
onMenuItemAction
when the children prop isundefined
[v3.15.5] (Oct 4th, 2024)
Updates
- Usage of template message feature:
- Template data in message
- removed: A message with valid
extendedMessagePayload.template
value will be displayed withTemplateMessageItemBody
. - added: A message with valid
extendedMessagePayload.message_template
value will be displayed withTemplateMessageItemBody
.
- Container type data in message
- removed: Added 'wide' width support for
MessageContent
when value exists inmessage.extendedMessagePayload['ui']['container_type']
- added: Added support for template message rendering options (boolean type):
profile
,time
, andnickname
inextendedMessagePayload['message_template']['container_options']
[v3.15.4] (Sep 26th, 2024)
Features
- Added stringSet for date format and applied them
Key Value DATE_FORMAT__MESSAGE_CREATED_AT 'p'
DATE_FORMAT__UNREAD_SINCE 'p MMM dd'
DATE_FORMAT__LAST_MESSAGE_CREATED_AT__TODAY 'p'
DATE_FORMAT__LAST_MESSAGE_CREATED_AT__THIS_YEAR 'MMM d'
DATE_FORMAT__LAST_MESSAGE_CREATED_AT__PREVIOUS_YEAR 'yyyy/M/d'
[v3.15.3] (Sep 12th, 2024)
Fixes
- Fixed incorrect styling for
Checkbox
. - Fixed the issue where the channel list appears empty when the UIKit is rendered for the first time.
[v3.15.2] (Sep 6th, 2024)
Features
-
Introduced new
message
event handlers foronSendMessageFailed
,
onUpdateMessageFailed
, andonFileUploadFailed
in theeventHandlers
prop of the message input component. These handlers allow developers to
respond to message send, update, and file upload failures.- How to use?
<Sendbird eventHandlers={{ message: { onSendMessageFailed: (message, error) => { // You can use the message parameter to create specific conditions if (message.isUserMessage()) { alert(`Message failed to send: ${error?.message}`); } }, onUpdateMessageFailed: (message, error) => { console.error(`Failed to update message: ${message.messageId}, Error: ${error}`); }, onFileUploadFailed: (error) => { console.error('File upload failed', error); }, }, }}
Fixes
- Fixed an issue where the channel UI's scroll did not work after
sending a new message. This issue was specific to the NextJS
environment.
[v3.15.1] (Aug 29, 2024)
Fixes
- Fixed unread count badge position on the ChannelPreview item component.
[v3.15.0] (Aug 29, 2024)
Features
-
UIKit now supports form messages! Messages with
messageForm
will be displayed as form messages.- Added
enableFormTypeMessage
global option- How to use?
<App appId={appId} userId={userId} uikitOptions={{ groupChannel: { // Below turns on the form message feature. Default value is false. enableFormTypeMessage: true, } }} />
MessageInput
is now being disabled if a channel has a form message that is not submitted and itsextendedMessagePayload['disable_chat_input']
value is true- Added
FormMessageItemBody
, andFormInput
- Added
-
Added support for EmojiCategory. You can now filter emojis for different messages when adding Reactions to a message.
-
Added
filterEmojiCategoryIds
toGroupChannelProvider
andThreadProvider
.- How to Use
const filterEmojiCategoryIds = (message: SendableMessage) => { if (message.customType === 'emoji_category_2') return [2]; return [1]; } <GroupChannel filterEmojiCategoryIds={filterEmojiCategoryIds} />
- Note: You need to set your custom EmojiCategory using Sendbird Platform API in advance.
-
Added sub-rendering props to the
ThreadListItem
andThreadListItemContent
components.- Added props list:
renderSenderProfile
,renderMessageBody
,renderMessageHeader
,renderEmojiReactions
, andrenderMobileMenuOnLongPress
. - How to use:
const CustomThread = () => ( <ThreadProvider> <ThreadUI renderMessage={(props) => ( <ThreadListItem {...props} renderSenderProfile={() => <></>} /> )} /> </ThreadProvider> );
- Added props list:
-
Exported subcomponents of
MessageContent
:import { MessageBody, MessageHeader, MessageProfile } from '@sendbird/uikit-react/ui/MessageContent';
Fixes
- Fixed broken CSS in Thread:
- Style was not applied to
ParentMessageInfo
until the first message was received on the thread list. - Scroll functionality was not working on the thread list.
- Style was not applied to
- Fixed an issue where HTML entities like
§
or<
were automatically converted to symbols when pasted into a contentEditable element, ensuring they are now preserved as plain text. - Fixed an issue where the style was breaking in messages due to emoji reactions.
- Fixed a bug where y-scroll was not working in
EditUserProfileUIView
when the app was displayed in horizontal view on mobile devices. - Fixed a bug where an offline banned user was not leaving the channel upon reconnecting in mobile view.
- Fixed thumbnail image overflow in OG messages in open channels.
- Fixed broken file viewer title in mobile view.
- Fixed a bug where markdown messages were incorrectly displayed in channel previews.
- Renamed the prop
onUserProfileMessage
toonStartDirectMessage
.- Deprecated the
onUserProfileMessage
prop inSendbirdProvider
andUserProfileProvider
. - Deprecated the
onUserProfileMessage
interface inSendbirdStateContext
andUserProfileContext
. - Use
onStartDirectMessage
instead.
- Deprecated the
[v3.14.14] (Aug 1, 2024)
Features
- Added
forceLeftToRightMessageLayout
to enable LTR message layout display in RTL mode. This helps users who sethtmlTextDirection='rtl'
to keep the message layout in LTR format (outgoing messages on the right, incoming messages on the left).import SendbirdProvider from ‘@sendbird/uikit-react/SendbirdProvider’; import ar from 'date-fns/locale/ar'; const YourComponent() => { return ( <SendbirdProvider htmlTextDirection="rtl" // for RTL display forceLeftToRightMessageLayout={true} // to enforce the message layout to Left-to-Right direction even though htmlTextDirection is set to ‘rtl’ dateLocale={ar} // locale setting would be necessary too {…other props} > {...other components} </SendbirdProvider> ) }
- Banned members no longer affect the ChannelSettings/Profile.
Fixes
- Fixed an issue where the
GroupChannelCollection
was not recreated whenchannelListQueryParams
changed. The channel list now refreshes when the values ofchannelListQueryParams
are updated. - Fixed a bug where replied child message width did not fit the content.
- Corrected the direction of some icons in RTL mode. Specifically, the leave channel icon and the broadcast channel icon.
- Fixed an issue where the feedback modal was not displayed on feedback button click in mobile view. No change in desktop view behavior.
- Fixed an issue where banned members affected the ChannelSettings/Profile. Banned members now do not affect these settings.
Chores
- Omitted
renderUserListItem
ofChannelSettingsUIProps
from theChannelSettingsProps
.
[v3.14.13] (July 18, 2024)
Features
-
Address RTL UI Feedback
- Fixed an issue where the
htmlTextDirection
prop didn't work when usingSendbirdProvider
, but only worked in the App module. - Updated the paper plane icon to point left instead of right in RTL mode.
- Fixed an issue where the
-
Message Menu Customization in Threads
- Added
renderMessageMenu
andrenderEmojiMenu
props to the<ParentMessageInfo />
,<ThreadListItem />
, and<ThreadListItemContent />
components. - Example usage:
<Thread renderMessage={(props) => ( <ThreadListItem {...props} renderMessageMenu={(props) => ( <MessageMenu {...props} renderMenuItems={({ items }) => ( <> <items.CopyMenuItem /> <items.DeleteMenuItem /> </> )} /> )} /> )} />
- Added
Fixes
- Deprecation Marks on Channel & ChannelList Modules
- Marked
Channel
,ChannelProvider
,ChannelList
, andChannelListProvider
as deprecated. - For migration guidance, please refer to the Group Channel Migration Guide.
- Marked
Chore
- Improve Stability of
useMenuItems
- Improved the stability of the
useMenuItems
hook. - Exported
ChannelListQueryParamsType
. - Moved the
renderUserListItem
prop to the Provider from the UI component. - Exported the
ChannelSettingsMenuItem
component.
- Improved the stability of the
- Added
interop: "compat"
setting for the CommonJS output in Rollup Config to enhance the compatibility between ESM and CJS.
[v3.14.12] (July 3, 2024)
Features
-
RTL Support
- Added
htmlTextDirection
prop toSendbirdProvider
to support Right-To-Left (RTL) text direction for Middle East customers. Read more.
import ar from 'date-fns/locale/ar'; <SendbirdProvider ... htmlTextDirection={'rtl' | 'ltr'} // Setting a proper value to dateLocale would be necessary dateLocale={ar} > </SendbirdProvider>
- Added
-
DX Improvements: ChannelSetting SettingMenu
- Added new components and hooks to make the menu items in the
ChannelSettingsUI
more modular and customizable. - New Files:
useMenuItems.tsx
: Custom hook for menu items based on user roles.MenuItem.tsx
: Reusable and customizable menu item component.MenuListByRole.tsx
: Renders a list of menu items based on user roles.
- Example usage:
To customize the moderation panel with selected menu items:import React from 'react'; import ChannelSettingsUI from '@sendbird-uikit/ChannelSettings/components/ChannelSettingsUI'; import useMenuItems from '@sendbird-uikit/ChannelSettings/hooks/useMenuList'; const CustomChannelSettings = () => { const menuItems = useMenuItems(); const renderCustomModerationPanel = () => { // Create a new object by selecting only the desired menu items. const customMenuItems = { operator: { operators: menuItems.operator.operators, // Keep the operators menu allUsers: menuItems.operator.allUsers, // Keep the all users menu // Add or remove other menu items as needed. }, nonOperator: { allUsers: menuItems.nonOperator.allUsers, // Keep the all users menu // Add or remove other menu items as needed. }, }; return <MenuListByRole menuItems={customMenuItems} />; }; return ( <ChannelSettingsUI renderModerationPanel={renderCustomModerationPanel} /> ); }; export default CustomChannelSettings;
- Added new components and hooks to make the menu items in the
-
DX Improvements: ChannelSetting UserListItem
UserListItemMenu
has been newly created- Provided it as a module which also contains
UserListItemMenuProvider
anduseUserListItemMenuContext
import { UserListItemMenu, UserListItemMenuProvider, useUserListItemMenuContext } from '@sendbird/uikit-react/ui/UserListItemMenu';
- Added new
renderUserListItem
props to the list components ofChannelSettings
:OperatorList
,MemberList
,MutedMemberList
,BannedUserList
- Exported the following modules:
OperatorList
,MemberList
,MutedMemberList
,BannedUserList
import { OperatorList, MemberList, MutedMemberList, BannedUserList } from '@sendbird/uikit-react/ChannelSettings/components/ChannelSettingsUI';
- Merged
ui/UserListItem
andChannelSettings/components/UserListItem
:- Use
ui/UserListItem
from now on - Added
size
prop toUserListItem
, which now accepts two values: 'normal' and 'small' ('small' replaces the previousChannelSettings/components/UserListItem
)normal
: Used primarily in Modalssmall
: Used primarily in Lists
- Use
- Example usage:
<ChannelSettings renderUserListItem={(props) => ( <UserListItem {...props} renderListItemMenu={(props) => ( <UserListItemMenu {...props} onToggleOperatorState={({ user, newState, error }) => {/** Handle operator state change */}} onToggleMuteState={({ user, newState, error }) => {/** Handle mute state change */}} onToggleBanState={({ user, newState, error }) => {/** Handle ban state change */}} renderTrigger={({ ref }) => (<div ref={ref}>{/** Render your custom trigger icon here */}</div>)} renderMenuItems={({ items }) => ( <> <items.OperatorToggleMenuItem /> <items.MuteToggleMenuItem /> <items.BanToggleMenuItem /> </> )} /> )} /> )} />
Fixes
- Fixed image file viewer header style
- Disabled
isSuperGroupReactionsEnabled
setter - Use
APP_LAYOUT_ROOT
to get the area info of the UIKitexport const APP_LAYOUT_ROOT = 'sendbird-app__layout';
- To ensure the menu positions are calculated correctly, wrap the entire area using
SendbirdProvider
with a tag that has the specified ID.
- To ensure the menu positions are calculated correctly, wrap the entire area using
Chore
- Updated
@sendbird/chat
version to 4.13.0- Improved channel/message refreshing performance utilizing LocalCaching.