diff --git a/jam-ui/src/hooks/useSessionWebSocket.js b/jam-ui/src/hooks/useSessionWebSocket.js index 69c060c4b..4607aeeef 100644 --- a/jam-ui/src/hooks/useSessionWebSocket.js +++ b/jam-ui/src/hooks/useSessionWebSocket.js @@ -35,9 +35,17 @@ import { } from '../store/features/sessionChatSlice'; /** - * Helper function to get channel key from chat message - * Session messages use sessionId directly, lesson uses lessonSessionId, global uses 'global' + * Helper function to get channel key from WebSocket chat message + * + * Channel keys map Protocol Buffer channel types to Redux state keys: + * - Session messages: Use session_id directly + * - Lesson messages: Use lesson_session_id directly + * - Global messages: Use 'global' literal + * * @param {Object} message - WebSocket message with channel and ID fields + * @param {string} message.channel - Channel type ('session', 'lesson', or 'global') + * @param {string} [message.session_id] - Session ID (for session channel) + * @param {string} [message.lesson_session_id] - Lesson session ID (for lesson channel) * @returns {string} Channel key for Redux state */ const getChannelKeyFromMessage = (message) => { @@ -187,7 +195,19 @@ export const useSessionWebSocket = (sessionId) => { } }, - // Phase 7 Plan 3: Handle CHAT_MESSAGE from WebSocket + /** + * Phase 7 Plan 3: Handle CHAT_MESSAGE from WebSocket + * + * Transforms Protocol Buffer message format to Redux format and handles + * unread count increment based on chat window state. + * + * Unread increment logic: + * - Increment if window is closed + * - Increment if window is open but viewing a different channel + * - Do NOT increment if window is open and viewing the same channel + * + * @param {Object} message - Protocol Buffer formatted chat message + */ CHAT_MESSAGE: (message) => { console.log('Chat message received:', message); @@ -206,12 +226,13 @@ export const useSessionWebSocket = (sessionId) => { claimedRecording: message.claimed_recording || null }; - // Add message to Redux + // Add message to Redux state dispatch(addMessageFromWebSocket(chatMessage)); - // Increment unread count if window closed or different channel active + // Increment unread count if window closed or viewing different channel const messageChannelKey = getChannelKeyFromMessage(message); - if (!chatState.isWindowOpen || chatState.activeChannel !== messageChannelKey) { + const shouldIncrementUnread = !chatState.isWindowOpen || chatState.activeChannel !== messageChannelKey; + if (shouldIncrementUnread) { dispatch(incrementUnreadCount({ channel: messageChannelKey })); } },