feat: Implement message delivered event handling to update message statuses in conversations.
This commit is contained in:
@@ -10,6 +10,7 @@ import type {
|
||||
TypingIndicator,
|
||||
UserStatusChange,
|
||||
MessagesReadEvent,
|
||||
MessageDeliveredEvent,
|
||||
MessageType,
|
||||
MessageStatus,
|
||||
} from '@/types/messaging';
|
||||
@@ -561,6 +562,25 @@ export function useMessaging(options: UseMessagingOptions = {}): UseMessagingRet
|
||||
}
|
||||
);
|
||||
|
||||
const unsubscribeDelivered = socketService.onMessageDelivered(
|
||||
(data: MessageDeliveredEvent) => {
|
||||
if (data.conversationId === currentConversationIdRef.current) {
|
||||
// Update single message or batch of messages to DELIVERED
|
||||
const deliveredIds = data.messageIds || (data.messageId ? [data.messageId] : []);
|
||||
if (deliveredIds.length > 0) {
|
||||
setMessages((prev) =>
|
||||
prev.map((m) => {
|
||||
if (deliveredIds.includes(m.id) && m.status === 'SENT') {
|
||||
return { ...m, status: 'DELIVERED' as MessageStatus, deliveredAt: data.deliveredAt };
|
||||
}
|
||||
return m;
|
||||
})
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
// Auth error handling (token refresh + reconnect) is handled globally
|
||||
// by PresenceProvider — no duplicate handler needed here.
|
||||
|
||||
@@ -571,6 +591,7 @@ export function useMessaging(options: UseMessagingOptions = {}): UseMessagingRet
|
||||
unsubscribeTypingStop();
|
||||
unsubscribeStatus();
|
||||
unsubscribeRead();
|
||||
unsubscribeDelivered();
|
||||
};
|
||||
}, [updateUserStatus]);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user