UNPKG

stream-chat-react

Version:

React components to create chat conversations or livestream style chat

39 lines (38 loc) 1.59 kB
import { useCallback, useEffect, useState } from 'react'; export const useLastDeliveredData = (props) => { const { channel, lastOwnMessage, messages, returnAllReadData } = props; const calculateForAll = useCallback(() => messages.reduce((acc, msg) => { acc[msg.id] = channel.messageReceiptsTracker.deliveredForMessage({ msgId: msg.id, timestampMs: msg.created_at.getTime(), }); return acc; }, {}), [channel, messages]); const calculateForLastOwn = useCallback(() => { if (!lastOwnMessage) return {}; return { [lastOwnMessage.id]: channel.messageReceiptsTracker.deliveredForMessage({ msgId: lastOwnMessage.id, timestampMs: lastOwnMessage.created_at.getTime(), }), }; }, [channel, lastOwnMessage]); const [deliveredTo, setDeliveredTo] = useState(returnAllReadData ? calculateForAll : calculateForLastOwn); useEffect(() => { if (!returnAllReadData) return; setDeliveredTo(calculateForAll); return channel.on('message.delivered', () => setDeliveredTo(calculateForAll)) .unsubscribe; }, [channel, calculateForAll, returnAllReadData]); useEffect(() => { if (returnAllReadData) return; else setDeliveredTo(calculateForLastOwn); return channel.on('message.delivered', () => setDeliveredTo(calculateForLastOwn)) .unsubscribe; }, [channel, calculateForLastOwn, returnAllReadData]); return deliveredTo; };