fix(chat): real-time active users list updates
Fixed issue where active users list in event chat did not update in real-time when new users joined. Users had to refresh the page to see newly joined participants. Root Cause: - getAllDisplayUsers() used checkedInUsers (loaded once from API) as base list, with activeUsers (Socket.IO real-time) only for isOnline flag - When new user joined chat, they appeared in activeUsers but not in checkedInUsers, so they were not displayed Solution: - Rewrote getAllDisplayUsers() to prioritize activeUsers (real-time data) - Merges activeUsers (online) with checkedInUsers (offline checked-in users) - Uses Socket.IO data as source of truth for online users - Enriches with database data when available (firstName, lastName, etc) - Sorts online users first, offline second Changes: - EventChatPage.jsx: Rewrote getAllDisplayUsers() to merge activeUsers with checkedInUsers, prioritizing real-time Socket.IO data - useEventChat.js: Added debug logging for active_users events - socket/index.js: Added debug logging for active_users emissions Testing: - User A in chat sees User B appear immediately when B joins - No page refresh required - Online/offline status updates in real-time
This commit is contained in:
@@ -225,6 +225,7 @@ function initializeSocket(httpServer) {
|
||||
|
||||
// Broadcast updated active users list
|
||||
const users = Array.from(activeUsers.get(eventId)).map(u => JSON.parse(u));
|
||||
console.log(`📡 Emitting active_users to room ${roomName}:`, users.length, 'users');
|
||||
io.to(roomName).emit('active_users', users);
|
||||
|
||||
// Notify room about new user
|
||||
@@ -276,6 +277,7 @@ function initializeSocket(httpServer) {
|
||||
|
||||
// Broadcast updated list
|
||||
const updatedUsers = Array.from(users).map(u => JSON.parse(u));
|
||||
console.log(`📡 Emitting active_users (after leave) to room ${roomName}:`, updatedUsers.length, 'users');
|
||||
io.to(roomName).emit('active_users', updatedUsers);
|
||||
}
|
||||
|
||||
@@ -599,6 +601,7 @@ function initializeSocket(httpServer) {
|
||||
|
||||
// Broadcast updated list
|
||||
const updatedUsers = Array.from(users).map(u => JSON.parse(u));
|
||||
console.log(`📡 Emitting active_users (after disconnect) to room ${socket.currentEventRoom}:`, updatedUsers.length, 'users');
|
||||
io.to(socket.currentEventRoom).emit('active_users', updatedUsers);
|
||||
|
||||
// Notify about user leaving
|
||||
|
||||
Reference in New Issue
Block a user