From 2f92e7eedda43338b18fb6bb613906ce662a8cc0 Mon Sep 17 00:00:00 2001 From: Chris Heo Date: Thu, 24 Apr 2025 10:13:56 -0700 Subject: [PATCH 1/2] bug-fix by adding deps --- .../context/GroupChannelProvider.tsx | 4 +-- .../context/hooks/useGroupChannel.ts | 33 +++++++++++-------- 2 files changed, 22 insertions(+), 15 deletions(-) diff --git a/src/modules/GroupChannel/context/GroupChannelProvider.tsx b/src/modules/GroupChannel/context/GroupChannelProvider.tsx index 5802faa8d..cfaf4514c 100644 --- a/src/modules/GroupChannel/context/GroupChannelProvider.tsx +++ b/src/modules/GroupChannel/context/GroupChannelProvider.tsx @@ -248,10 +248,10 @@ const GroupChannelManager :React.FC { - if (typeof startingPoint === 'number') { + if (typeof startingPoint === 'number' && messageDataSource.initialized) { actions.scrollToMessage(startingPoint, 0, false, false); } - }, [startingPoint]); + }, [messageDataSource.initialized, startingPoint]); // Animated message handling useEffect(() => { diff --git a/src/modules/GroupChannel/context/hooks/useGroupChannel.ts b/src/modules/GroupChannel/context/hooks/useGroupChannel.ts index 591507658..b4ab0259c 100644 --- a/src/modules/GroupChannel/context/hooks/useGroupChannel.ts +++ b/src/modules/GroupChannel/context/hooks/useGroupChannel.ts @@ -116,21 +116,28 @@ export const useGroupChannel = () => { if (topOffset) state.scrollPubSub.publish('scroll', { top: topOffset, animated: scrollAnimated }); if (messageFocusAnimated ?? true) setAnimatedMessageId(messageId); } else { - await state.resetWithStartingPoint(createdAt); - setTimeout(() => { - const topOffset = getMessageTopOffset(createdAt); - if (topOffset) { - state.scrollPubSub.publish('scroll', { - top: topOffset, - lazy: false, - animated: scrollAnimated, - }); - } - if (messageFocusAnimated ?? true) setAnimatedMessageId(messageId); - }); + if (state.initialized) { + await state.resetWithStartingPoint(createdAt); + setTimeout(() => { + const topOffset = getMessageTopOffset(createdAt); + if (topOffset) { + state.scrollPubSub.publish('scroll', { + top: topOffset, + lazy: false, + animated: scrollAnimated, + }); + } + if (messageFocusAnimated ?? true) setAnimatedMessageId(messageId); + }); + } } clickHandler.activate(); - }, [setAnimatedMessageId, state.scrollRef.current, state.messages?.map(it => it?.messageId)]); + }, [ + setAnimatedMessageId, + state.initialized, + state.scrollRef.current, + state.messages?.map(it => it?.messageId), + ]); const toggleReaction = useCallback((message: SendableMessageType, emojiKey: string, isReacted: boolean) => { if (!state.currentChannel) return; From 4e8c17082ffaf5b7dbf989ab8f4af05b0b75e5e8 Mon Sep 17 00:00:00 2001 From: "junyoung.lim" Date: Fri, 25 Apr 2025 15:01:39 +0900 Subject: [PATCH 2/2] Fix test cases --- .../__tests__/useGroupChannel.spec.tsx | 1 + .../context/hooks/useGroupChannel.ts | 28 +++++++++---------- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/modules/GroupChannel/context/__tests__/useGroupChannel.spec.tsx b/src/modules/GroupChannel/context/__tests__/useGroupChannel.spec.tsx index 234c8523f..a5de60482 100644 --- a/src/modules/GroupChannel/context/__tests__/useGroupChannel.spec.tsx +++ b/src/modules/GroupChannel/context/__tests__/useGroupChannel.spec.tsx @@ -304,6 +304,7 @@ describe('useGroupChannel', () => { const mockResetWithStartingPoint = jest.fn().mockResolvedValue(undefined); const mockStore = createMockStore({ messages: [], + initialized: true, scrollRef: { current: document.createElement('div'), }, diff --git a/src/modules/GroupChannel/context/hooks/useGroupChannel.ts b/src/modules/GroupChannel/context/hooks/useGroupChannel.ts index b4ab0259c..f28819afd 100644 --- a/src/modules/GroupChannel/context/hooks/useGroupChannel.ts +++ b/src/modules/GroupChannel/context/hooks/useGroupChannel.ts @@ -115,21 +115,19 @@ export const useGroupChannel = () => { const topOffset = getMessageTopOffset(message.createdAt); if (topOffset) state.scrollPubSub.publish('scroll', { top: topOffset, animated: scrollAnimated }); if (messageFocusAnimated ?? true) setAnimatedMessageId(messageId); - } else { - if (state.initialized) { - await state.resetWithStartingPoint(createdAt); - setTimeout(() => { - const topOffset = getMessageTopOffset(createdAt); - if (topOffset) { - state.scrollPubSub.publish('scroll', { - top: topOffset, - lazy: false, - animated: scrollAnimated, - }); - } - if (messageFocusAnimated ?? true) setAnimatedMessageId(messageId); - }); - } + } else if (state.initialized) { + await state.resetWithStartingPoint(createdAt); + setTimeout(() => { + const topOffset = getMessageTopOffset(createdAt); + if (topOffset) { + state.scrollPubSub.publish('scroll', { + top: topOffset, + lazy: false, + animated: scrollAnimated, + }); + } + if (messageFocusAnimated ?? true) setAnimatedMessageId(messageId); + }); } clickHandler.activate(); }, [