Skip to content

Commit addd2fa

Browse files
authored
fix: Move message list scroll after OG image is loaded (#505)
### Description Of Changes * Move the scroll of the message list after loading the OG message's thumbnail image [UIKIT-3724](https://sendbird.atlassian.net/browse/UIKIT-3724)
1 parent 47b6f4d commit addd2fa

File tree

5 files changed

+12
-4
lines changed

5 files changed

+12
-4
lines changed

scripts/index_d_ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -597,7 +597,7 @@ declare module "SendbirdUIKitGlobal" {
597597
hasSeparator?: boolean;
598598
chainTop?: boolean;
599599
chainBottom?: boolean;
600-
handleScroll: () => void;
600+
handleScroll?: () => void;
601601
// for extending
602602
renderMessage?: (props: RenderMessageProps) => React.ReactNode | React.ReactElement;
603603
renderCustomSeparator?: (props: RenderCustomSeparatorProps) => React.ReactNode | React.ReactElement;

src/modules/Channel/components/Message/index.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ type MessageUIProps = {
3232
hasSeparator?: boolean;
3333
chainTop?: boolean;
3434
chainBottom?: boolean;
35-
handleScroll: () => void;
35+
handleScroll?: () => void;
3636
// for extending
3737
renderMessage?: (props: RenderMessageProps) => React.ReactElement;
3838
renderCustomSeparator?: (props: RenderCustomSeparatorProps) => React.ReactElement;
@@ -137,6 +137,7 @@ const Message = ({
137137
}));
138138
}, [mentionedUserIds]);
139139

140+
// Move the messsage list scroll when the last message's height is changed by reactions
140141
useDidMountEffect(() => {
141142
if (currentGroupChannel?.lastMessage?.messageId === message?.messageId) {
142143
handleScroll?.();
@@ -358,6 +359,7 @@ const Message = ({
358359
setQuoteMessage={setQuoteMessage}
359360
onReplyInThread={onReplyInThread}
360361
onQuoteMessageClick={onQuoteMessageClick}
362+
onMessageHeightChange={handleScroll}
361363
/>
362364
)
363365
}

src/modules/Channel/components/MessageList/index.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ const MessageList: React.FC<MessageListProps> = ({
103103
}
104104
};
105105

106-
const handleScroll = () => {
106+
const handleMessageHeightChange = () => {
107107
const current = scrollRef?.current;
108108
if (current) {
109109
const bottom = current.scrollHeight - current.scrollTop - current.offsetHeight;
@@ -156,7 +156,7 @@ const MessageList: React.FC<MessageListProps> = ({
156156
return (
157157
<MessageProvider message={m} key={m?.messageId} isByMe={isByMe}>
158158
<Message
159-
handleScroll={handleScroll}
159+
handleScroll={handleMessageHeightChange}
160160
renderMessage={renderMessage}
161161
message={m}
162162
hasSeparator={hasSeparator}

src/ui/MessageContent/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@ interface Props {
7979
setQuoteMessage?: (message: UserMessage | FileMessage) => void;
8080
onReplyInThread?: (props: { message: UserMessage | FileMessage }) => void;
8181
onQuoteMessageClick?: (props: { message: UserMessage | FileMessage }) => void;
82+
onMessageHeightChange?: () => void;
8283
}
8384
export default function MessageContent({
8485
className,
@@ -103,6 +104,7 @@ export default function MessageContent({
103104
setQuoteMessage,
104105
onReplyInThread,
105106
onQuoteMessageClick,
107+
onMessageHeightChange,
106108
}: Props): ReactElement {
107109
const messageTypes = getUIKitMessageTypes();
108110
const { dateLocale } = useLocalization();
@@ -311,6 +313,7 @@ export default function MessageContent({
311313
mouseHover={mouseHover}
312314
isMentionEnabled={config?.isMentionEnabled || false}
313315
isReactionEnabled={isReactionEnabledInChannel}
316+
onMessageHeightChange={onMessageHeightChange}
314317
/>
315318
)}
316319
{(getUIKitMessageType((message as FileMessage)) === messageTypes.FILE) && (

src/ui/OGMessageItemBody/index.tsx

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ interface Props {
2323
mouseHover?: boolean;
2424
isMentionEnabled?: boolean;
2525
isReactionEnabled?: boolean;
26+
onMessageHeightChange?: () => void;
2627
}
2728

2829
export default function OGMessageItemBody({
@@ -32,6 +33,7 @@ export default function OGMessageItemBody({
3233
mouseHover = false,
3334
isMentionEnabled = false,
3435
isReactionEnabled = false,
36+
onMessageHeightChange = () => { /* noop */ },
3537
}: Props): ReactElement {
3638
const imageRef = useRef<HTMLDivElement>(null);
3739
const { stringSet } = useContext(LocalizationContext);
@@ -85,6 +87,7 @@ export default function OGMessageItemBody({
8587
onClick={openOGUrl}
8688
>
8789
<ImageRenderer
90+
onLoad={onMessageHeightChange}
8891
onError={() => {
8992
try {
9093
imageRef?.current?.classList?.add('sendbird-og-message-item-body__og-thumbnail__empty');

0 commit comments

Comments
 (0)