diff --git a/src/modules/GroupChannel/components/Message/MessageView.tsx b/src/modules/GroupChannel/components/Message/MessageView.tsx index 8b77cc777..f56b1e3b3 100644 --- a/src/modules/GroupChannel/components/Message/MessageView.tsx +++ b/src/modules/GroupChannel/components/Message/MessageView.tsx @@ -196,18 +196,26 @@ const MessageView = (props: MessageViewProps) => { ); }, [mentionedUserIds]); - /** - * Move the message list scroll - * when the message's height is changed by `showEdit` OR `message.reactions` - */ + // Side effect: scroll position update when showEdit is toggled or reactions updated useDidMountEffect(() => { handleScroll?.(); }, [showEdit, message?.reactions?.length]); + // Side effect: scroll position update when message updated useDidMountEffect(() => { handleScroll?.(true); }, [message?.updatedAt, (message as UserMessage)?.message]); + // Side effect: scroll position update when suggested replies are rendered or hidden + const prevShouldRenderSuggestedReplies = useRef(shouldRenderSuggestedReplies); + useEffect(() => { + if (prevShouldRenderSuggestedReplies.current !== shouldRenderSuggestedReplies) { + handleScroll?.(); + } else { + prevShouldRenderSuggestedReplies.current = shouldRenderSuggestedReplies; + } + }, [shouldRenderSuggestedReplies]); + useLayoutEffect(() => { // Keep the scrollBottom value after fetching new message list (but GroupChannel module is not needed.) if (usedInLegacy) handleScroll?.(true);