Skip to content

Commit 155f106

Browse files
authored
fix: remove stale message status for the last loaded message on returnAllReadData false (#2881)
1 parent e8142da commit 155f106

File tree

1 file changed

+25
-12
lines changed

1 file changed

+25
-12
lines changed

src/components/MessageList/hooks/useLastDeliveredData.ts

Lines changed: 25 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,9 @@ export const useLastDeliveredData = (
1313
): Record<string, UserResponse[]> => {
1414
const { channel, lastOwnMessage, messages, returnAllReadData } = props;
1515

16-
const calculate = useCallback(() => {
17-
if (returnAllReadData) {
18-
return messages.reduce(
16+
const calculateForAll = useCallback(
17+
() =>
18+
messages.reduce(
1919
(acc, msg) => {
2020
acc[msg.id] = channel.messageReceiptsTracker.deliveredForMessage({
2121
msgId: msg.id,
@@ -24,24 +24,37 @@ export const useLastDeliveredData = (
2424
return acc;
2525
},
2626
{} as Record<string, UserResponse[]>,
27-
);
28-
}
27+
),
28+
[channel, messages],
29+
);
30+
31+
const calculateForLastOwn = useCallback(() => {
2932
if (!lastOwnMessage) return {};
3033
return {
3134
[lastOwnMessage.id]: channel.messageReceiptsTracker.deliveredForMessage({
3235
msgId: lastOwnMessage.id,
3336
timestampMs: lastOwnMessage.created_at.getTime(),
3437
}),
3538
};
36-
}, [channel, lastOwnMessage, messages, returnAllReadData]);
37-
38-
const [deliveredTo, setDeliveredTo] =
39-
useState<Record<string, UserResponse[]>>(calculate);
39+
}, [channel, lastOwnMessage]);
4040

41-
useEffect(
42-
() => channel.on('message.delivered', () => setDeliveredTo(calculate)).unsubscribe,
43-
[channel, calculate],
41+
const [deliveredTo, setDeliveredTo] = useState<Record<string, UserResponse[]>>(
42+
returnAllReadData ? calculateForAll : calculateForLastOwn,
4443
);
4544

45+
useEffect(() => {
46+
if (!returnAllReadData) return;
47+
setDeliveredTo(calculateForAll);
48+
return channel.on('message.delivered', () => setDeliveredTo(calculateForAll))
49+
.unsubscribe;
50+
}, [channel, calculateForAll, returnAllReadData]);
51+
52+
useEffect(() => {
53+
if (returnAllReadData) return;
54+
else setDeliveredTo(calculateForLastOwn);
55+
return channel.on('message.delivered', () => setDeliveredTo(calculateForLastOwn))
56+
.unsubscribe;
57+
}, [channel, calculateForLastOwn, returnAllReadData]);
58+
4659
return deliveredTo;
4760
};

0 commit comments

Comments
 (0)