diff --git a/src/hooks/useHTMLTextDirection.tsx b/src/hooks/useHTMLTextDirection.tsx index 393ae32d4..686ad5b26 100644 --- a/src/hooks/useHTMLTextDirection.tsx +++ b/src/hooks/useHTMLTextDirection.tsx @@ -15,18 +15,4 @@ const useHTMLTextDirection = (direction: HTMLTextDirection) => { }, [direction]); }; -export const useMessageLayoutDirection = (direction: HTMLTextDirection, forceLeftToRightMessageLayout: boolean, loading: boolean) => { - useEffect(() => { - if (loading) return; - const messageListElements = document.getElementsByClassName('sendbird-conversation__messages'); - if (messageListElements.length > 0) { - Array.from(messageListElements).forEach((elem: HTMLElement) => { - elem.dir = forceLeftToRightMessageLayout - ? 'ltr' - : direction; - }); - } - }, [direction, forceLeftToRightMessageLayout, loading]); -}; - export default useHTMLTextDirection; diff --git a/src/modules/Channel/components/MessageList/index.tsx b/src/modules/Channel/components/MessageList/index.tsx index dcbe558c9..dadde6762 100644 --- a/src/modules/Channel/components/MessageList/index.tsx +++ b/src/modules/Channel/components/MessageList/index.tsx @@ -25,6 +25,7 @@ import { getMessagePartsInfo } from '../../../GroupChannel/components/MessageLis import { GroupChannelMessageListProps } from '../../../GroupChannel/components/MessageList'; import { GroupChannelUIBasicProps } from '../../../GroupChannel/components/GroupChannelUI/GroupChannelUIView'; import { deleteNullish } from '../../../../utils/utils'; +import { getHTMLTextDirection } from '../../../../utils'; const SCROLL_BOTTOM_PADDING = 50; @@ -175,7 +176,13 @@ export const MessageList = (props: MessageListProps) => { return ( <> {!isScrolled && } -
+
{ imageCompression, markAsReadScheduler, groupChannel, - htmlTextDirection, - forceLeftToRightMessageLayout, } = config; const sdk = globalStore?.stores?.sdkStore?.sdk; const sdkInit = globalStore?.stores?.sdkStore?.initialized; @@ -381,12 +378,6 @@ const ChannelProvider = (props: ChannelContextProps) => { markAsReadScheduler, }); - useMessageLayoutDirection( - htmlTextDirection, - forceLeftToRightMessageLayout, - loading, - ); - // callbacks for Message CURD actions const deleteMessage = useDeleteMessageCallback( { currentGroupChannel, messagesDispatcher }, diff --git a/src/modules/GroupChannel/components/MessageList/index.tsx b/src/modules/GroupChannel/components/MessageList/index.tsx index e16e8e3b4..7e8019df6 100644 --- a/src/modules/GroupChannel/components/MessageList/index.tsx +++ b/src/modules/GroupChannel/components/MessageList/index.tsx @@ -3,7 +3,7 @@ import React, { useEffect, useState } from 'react'; import type { Member } from '@sendbird/chat/groupChannel'; import { useGroupChannelHandler } from '@sendbird/uikit-tools'; -import { CoreMessageType, isSendableMessage } from '../../../../utils'; +import { CoreMessageType, isSendableMessage, getHTMLTextDirection } from '../../../../utils'; import { EveryMessage, RenderMessageParamsType, TypingIndicatorType } from '../../../../types'; import PlaceHolder, { PlaceHolderTypes } from '../../../../ui/PlaceHolder'; @@ -160,7 +160,13 @@ export const MessageList = (props: GroupChannelMessageListProps) => { return ( <> -
+
{ const { config, stores } = useSendbirdStateContext(); const { sdkStore } = stores; - const { markAsReadScheduler, logger, htmlTextDirection, forceLeftToRightMessageLayout } = config; + const { markAsReadScheduler, logger } = config; // State const [quoteMessage, setQuoteMessage] = useState(null); @@ -262,12 +261,6 @@ export const GroupChannelProvider = (props: GroupChannelProviderProps) => { if (_animatedMessageId) setAnimatedMessageId(_animatedMessageId); }, [_animatedMessageId]); - useMessageLayoutDirection( - htmlTextDirection, - forceLeftToRightMessageLayout, - messageDataSource.loading, - ); - const scrollToBottom = usePreservedCallback(async (animated?: boolean) => { if (!scrollRef.current) return; diff --git a/src/modules/Thread/components/ThreadUI/index.tsx b/src/modules/Thread/components/ThreadUI/index.tsx index 9f12afb58..915da2908 100644 --- a/src/modules/Thread/components/ThreadUI/index.tsx +++ b/src/modules/Thread/components/ThreadUI/index.tsx @@ -17,7 +17,7 @@ import useMemorizedThreadList from './useMemorizedThreadList'; import Label, { LabelTypography, LabelColors } from '../../../../ui/Label'; import { isAboutSame } from '../../context/utils'; import { MessageProvider } from '../../../Message/context/MessageProvider'; -import { SendableMessageType } from '../../../../utils'; +import { SendableMessageType, getHTMLTextDirection } from '../../../../utils'; import { classnames } from '../../../../utils/utils'; export interface ThreadUIProps { @@ -52,6 +52,7 @@ const ThreadUI: React.FC = ({ }: ThreadUIProps): React.ReactElement => { const { stores, + config, } = useSendbirdStateContext(); const currentUserId = stores?.sdkStore?.sdk?.currentUser?.userId; const { @@ -152,6 +153,7 @@ const ThreadUI: React.FC = ({ className={classnames('sendbird-thread-ui--scroll', 'sendbird-conversation__messages')} ref={scrollRef} onScroll={onScroll} + dir={getHTMLTextDirection(config?.htmlTextDirection, config?.forceLeftToRightMessageLayout)} > {MemorizedParentMessageInfo} diff --git a/src/modules/Thread/context/ThreadProvider.tsx b/src/modules/Thread/context/ThreadProvider.tsx index 876b88dea..a72a0d33f 100644 --- a/src/modules/Thread/context/ThreadProvider.tsx +++ b/src/modules/Thread/context/ThreadProvider.tsx @@ -33,8 +33,6 @@ import useSendVoiceMessageCallback from './hooks/useSendVoiceMessageCallback'; import { PublishingModuleType, useSendMultipleFilesMessage } from './hooks/useSendMultipleFilesMessage'; import { SendableMessageType } from '../../../utils'; import { useThreadFetchers } from './hooks/useThreadFetchers'; -import { useMessageLayoutDirection } from '../../../hooks/useHTMLTextDirection'; -import { ChannelStateTypes, ParentMessageStateTypes, ThreadListStateTypes } from '../types'; export interface ThreadProviderProps extends Pick { @@ -92,7 +90,7 @@ export const ThreadProvider = (props: ThreadProviderProps) => { const { user } = userStore; const sdkInit = sdkStore?.initialized; // // config - const { logger, pubSub, htmlTextDirection, forceLeftToRightMessageLayout } = config; + const { logger, pubSub } = config; const isMentionEnabled = config.groupChannel.enableMention; const isReactionEnabled = config.groupChannel.enableReactions; @@ -166,14 +164,6 @@ export const ThreadProvider = (props: ThreadProviderProps) => { } }, [stores.sdkStore.initialized, config.isOnline, initialize]); - useMessageLayoutDirection( - htmlTextDirection, - forceLeftToRightMessageLayout, - channelState === ChannelStateTypes.LOADING - || threadListState === ThreadListStateTypes.LOADING - || parentMessageState === ParentMessageStateTypes.LOADING, - ); - const toggleReaction = useToggleReactionCallback({ currentChannel }, { logger }); // Send Message Hooks diff --git a/src/utils/index.ts b/src/utils/index.ts index bc095a3c5..7dfdadaba 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -990,3 +990,7 @@ export const isSendableMessage = (message?: BaseMessage | null): message is Send export const isChannelJustCreated = (channel: GroupChannel): boolean => { return isSameSecond(channel.createdAt, channel.invitedAt) && !channel.lastMessage; }; + +export const getHTMLTextDirection = (direction: HTMLTextDirection, forceLeftToRightMessageLayout: boolean): string => { + return forceLeftToRightMessageLayout ? 'ltr' : direction; +};