Skip to content

Commit 1ff8033

Browse files
committed
perf: optimization in the hook
1 parent c3b747f commit 1ff8033

File tree

2 files changed

+24
-6
lines changed

2 files changed

+24
-6
lines changed

package/src/components/Message/hooks/useMessageDeliveryData.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { useCallback, useEffect, useState } from 'react';
22

3-
import { LocalMessage } from 'stream-chat';
3+
import { Event, LocalMessage } from 'stream-chat';
44

55
import { useChannelContext } from '../../../contexts/channelContext/ChannelContext';
6+
import { useChatContext } from '../../../contexts/chatContext/ChatContext';
67

78
export const useMessageDeliveredData = ({ message }: { message: LocalMessage }) => {
89
const { channel } = useChannelContext();
10+
const { client } = useChatContext();
911
const calculate = useCallback(() => {
1012
if (!message.created_at) {
1113
return 0;
@@ -20,9 +22,16 @@ export const useMessageDeliveredData = ({ message }: { message: LocalMessage })
2022
const [deliveredBy, setDeliveredBy] = useState<number>(calculate());
2123

2224
useEffect(() => {
23-
const { unsubscribe } = channel.on('message.delivered', () => setDeliveredBy(calculate()));
25+
const { unsubscribe } = channel.on('message.delivered', (event: Event) => {
26+
/**
27+
* An optimization to only re-calculate if the event is received by a different user.
28+
*/
29+
if (event.user?.id !== client.user?.id) {
30+
setDeliveredBy(calculate());
31+
}
32+
});
2433
return unsubscribe;
25-
}, [channel, calculate]);
34+
}, [channel, calculate, client.user?.id]);
2635

2736
return deliveredBy;
2837
};

package/src/components/Message/hooks/useMessageReadData.ts

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
import { useCallback, useEffect, useState } from 'react';
22

3-
import { LocalMessage } from 'stream-chat';
3+
import { Event, LocalMessage } from 'stream-chat';
44

55
import { useChannelContext } from '../../../contexts/channelContext/ChannelContext';
6+
import { useChatContext } from '../../../contexts/chatContext/ChatContext';
67

78
export const useMessageReadData = ({ message }: { message: LocalMessage }) => {
89
const { channel } = useChannelContext();
10+
const { client } = useChatContext();
911
const calculate = useCallback(() => {
1012
if (!message.created_at) {
1113
return 0;
@@ -21,9 +23,16 @@ export const useMessageReadData = ({ message }: { message: LocalMessage }) => {
2123
const [readBy, setReadBy] = useState<number>(calculate());
2224

2325
useEffect(() => {
24-
const { unsubscribe } = channel.on('message.read', () => setReadBy(calculate()));
26+
const { unsubscribe } = channel.on('message.read', (event: Event) => {
27+
/**
28+
* An optimization to only re-calculate if the event is received by a different user.
29+
*/
30+
if (event.user?.id !== client.user?.id) {
31+
setReadBy(calculate());
32+
}
33+
});
2534
return unsubscribe;
26-
}, [channel, calculate]);
35+
}, [channel, calculate, client.user?.id]);
2736

2837
return readBy;
2938
};

0 commit comments

Comments
 (0)