From ad8eae1d029476342b41f4bcf9c2503e98a2917f Mon Sep 17 00:00:00 2001 From: OnestarLee Date: Mon, 13 Oct 2025 17:37:12 +0900 Subject: [PATCH] fix: read receipts not updating in real-time --- .../common/useMessageOutgoingStatus.test.ts | 13 +++++++++++-- .../src/common/useMessageOutgoingStatus.ts | 8 +++++++- .../component/GroupChannelMessageList.tsx | 3 --- 3 files changed, 18 insertions(+), 6 deletions(-) diff --git a/packages/uikit-chat-hooks/src/__tests__/common/useMessageOutgoingStatus.test.ts b/packages/uikit-chat-hooks/src/__tests__/common/useMessageOutgoingStatus.test.ts index 96a028507..addeb5721 100644 --- a/packages/uikit-chat-hooks/src/__tests__/common/useMessageOutgoingStatus.test.ts +++ b/packages/uikit-chat-hooks/src/__tests__/common/useMessageOutgoingStatus.test.ts @@ -183,12 +183,20 @@ describe('useMessageOutgoingStatus', () => { }); act(() => { - sdk.__emit('channel', 'group_onUnreadMemberStatusUpdated', channel); + sdk.__emit('channel', 'group_onUserMarkedRead', channel); }); await waitFor(() => { expect(forceUpdate).toHaveBeenCalledTimes(2); }); + + act(() => { + sdk.__emit('channel', 'group_onUserMarkedUnread', channel); + }); + + await waitFor(() => { + expect(forceUpdate).toHaveBeenCalledTimes(3); + }); }); it('should not trigger forceUpdate if event not emitted', async () => { @@ -220,7 +228,8 @@ describe('useMessageOutgoingStatus', () => { act(() => { sdk.__emit('channel', 'group_onUndeliveredMemberStatusUpdated', channel); - sdk.__emit('channel', 'group_onUnreadMemberStatusUpdated', channel); + sdk.__emit('channel', 'group_onUserMarkedRead', channel); + sdk.__emit('channel', 'group_onUserMarkedUnread', channel); }); await waitFor(() => { diff --git a/packages/uikit-chat-hooks/src/common/useMessageOutgoingStatus.ts b/packages/uikit-chat-hooks/src/common/useMessageOutgoingStatus.ts index 83fcf6f5f..728998e2d 100644 --- a/packages/uikit-chat-hooks/src/common/useMessageOutgoingStatus.ts +++ b/packages/uikit-chat-hooks/src/common/useMessageOutgoingStatus.ts @@ -23,7 +23,13 @@ export const useMessageOutgoingStatus = ( forceUpdate(); }, - onUnreadMemberStatusUpdated(eventChannel) { + onUserMarkedRead(eventChannel) { + if (isDifferentChannel(channel, eventChannel)) return; + if (!isMyMessage(message, currentUser?.userId)) return; + + forceUpdate(); + }, + onUserMarkedUnread(eventChannel) { if (isDifferentChannel(channel, eventChannel)) return; if (!isMyMessage(message, currentUser?.userId)) return; diff --git a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx index 5c46454b2..ab77c5075 100644 --- a/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx +++ b/packages/uikit-react-native/src/domain/groupChannel/component/GroupChannelMessageList.tsx @@ -256,9 +256,6 @@ const GroupChannelMessageList = (props: GroupChannelProps['MessageList']) => { lazyScrollToBottom({ animated: true, timeout: 250 }); } }, - onChannelChanged(channel) { - if (isDifferentChannel(channel, props.channel)) return; - }, }); useEffect(() => {