feat: Implement message delivered event handling to update message statuses in conversations.

This commit is contained in:
pradeepkumar
2026-03-28 02:03:04 +05:30
parent 3f9554c8ba
commit bd40eaeb0c
3 changed files with 40 additions and 0 deletions

View File

@@ -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]);