From 6c2c6a7573bbba147b759aa1d1003afd716b8d3e Mon Sep 17 00:00:00 2001 From: "junyoung.lim" Date: Thu, 3 Apr 2025 15:06:17 +0900 Subject: [PATCH 1/3] v3.16.3 --- CHANGELOG.md | 5 +++++ package.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 742294445..94f9aa97c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog - v3 +## [v3.16.3] (Apr 3 2025) +### Fixes: +- Fixed an issue where the connection is still alive after `SendbirdProvider` have been unmounted. +- Fixed an undefined error of `emojiCategory`. + ## [v3.16.2] (Mar 28 2025) ### Features: - Added `tel` and `mailto` protocol support for the markup link diff --git a/package.json b/package.json index c3a77e410..0ca04b870 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@sendbird/uikit-react", - "version": "3.16.2", + "version": "3.16.3", "description": "Sendbird UIKit for React: A feature-rich and customizable chat UI kit with messaging, channel management, and user authentication.", "keywords": [ "sendbird", From 5ca9c0534393721fbd89c08fc69147b32c5ccc87 Mon Sep 17 00:00:00 2001 From: "junyoung.lim" Date: Tue, 8 Apr 2025 11:48:42 +0900 Subject: [PATCH 2/3] Fix flaky test case --- .../context/__tests__/useMessageListScroll.spec.tsx | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/modules/GroupChannel/context/__tests__/useMessageListScroll.spec.tsx b/src/modules/GroupChannel/context/__tests__/useMessageListScroll.spec.tsx index 5fd37c1d2..3cd236cc5 100644 --- a/src/modules/GroupChannel/context/__tests__/useMessageListScroll.spec.tsx +++ b/src/modules/GroupChannel/context/__tests__/useMessageListScroll.spec.tsx @@ -188,8 +188,10 @@ describe('useMessageListScroll', () => { clientHeight: 500, }; - // @ts-ignore - result.current.scrollRef.current = mockScrollElement; + await act(async () => { + // @ts-ignore + result.current.scrollRef.current = mockScrollElement; + }); await act(async () => { result.current.scrollPubSub.publish('scroll', {}); From a0e565dcc970e43b1913c4ccb6cd14f125a1cda5 Mon Sep 17 00:00:00 2001 From: "junyoung.lim" Date: Tue, 8 Apr 2025 13:32:08 +0900 Subject: [PATCH 3/3] Fix scroll logic and its tests --- .../context/__tests__/useMessageListScroll.spec.tsx | 12 ++++++------ .../context/hooks/useMessageListScroll.tsx | 9 ++++++--- 2 files changed, 12 insertions(+), 9 deletions(-) diff --git a/src/modules/GroupChannel/context/__tests__/useMessageListScroll.spec.tsx b/src/modules/GroupChannel/context/__tests__/useMessageListScroll.spec.tsx index 3cd236cc5..9f528de89 100644 --- a/src/modules/GroupChannel/context/__tests__/useMessageListScroll.spec.tsx +++ b/src/modules/GroupChannel/context/__tests__/useMessageListScroll.spec.tsx @@ -146,7 +146,7 @@ describe('useMessageListScroll', () => { }); describe('scroll', () => { - it('should do nothing if scrollRef is null', async () => { + it('should call resolve() even if scrollRef is null', async () => { const { result } = renderHook(() => useMessageListScroll('auto')); const resolveMock = jest.fn(); @@ -154,7 +154,9 @@ describe('useMessageListScroll', () => { result.current.scrollPubSub.publish('scroll', { resolve: resolveMock }); }); - expect(resolveMock).not.toHaveBeenCalled(); + await waitFor(() => { + expect(resolveMock).toHaveBeenCalled(); + }); }); it('should use scrollTop if scroll method is not defined', async () => { @@ -188,10 +190,8 @@ describe('useMessageListScroll', () => { clientHeight: 500, }; - await act(async () => { - // @ts-ignore - result.current.scrollRef.current = mockScrollElement; - }); + // @ts-ignore + result.current.scrollRef.current = mockScrollElement; await act(async () => { result.current.scrollPubSub.publish('scroll', {}); diff --git a/src/modules/GroupChannel/context/hooks/useMessageListScroll.tsx b/src/modules/GroupChannel/context/hooks/useMessageListScroll.tsx index 084b288c7..7a2bccfb4 100644 --- a/src/modules/GroupChannel/context/hooks/useMessageListScroll.tsx +++ b/src/modules/GroupChannel/context/hooks/useMessageListScroll.tsx @@ -72,12 +72,15 @@ export function useMessageListScroll(behavior: 'smooth' | 'auto', deps: Dependen unsubscribes.push( scrollPubSub.subscribe('scroll', ({ top, animated, lazy, resolve }) => { runCallback(() => { - if (!scrollRef.current) return; + if (!scrollRef.current || typeof top !== 'number') { + resolve?.(); + return; + } const { scrollTop, scrollHeight, clientHeight } = scrollRef.current; if (scrollRef.current.scroll) { scrollRef.current.scroll({ top, behavior: getScrollBehavior(behavior, animated) }); - } else if (typeof top === 'number') { + } else { scrollRef.current.scrollTop = top; } @@ -85,7 +88,7 @@ export function useMessageListScroll(behavior: 'smooth' | 'auto', deps: Dependen scrollDistanceFromBottomRef.current = Math.max(0, scrollHeight - scrollTop - clientHeight); setIsScrollBottomReached(scrollDistanceFromBottomRef.current === 0); - if (resolve) resolve(); + resolve?.(); }, lazy); }), );