feat(21-01): add clearAllMessages action and dispatch on session leave

- Add clearAllMessages reducer to sessionChatSlice.js
- Export clearAllMessages action
- Dispatch clearAllMessages in handleLeaveSubmit (explicit leave)
- Dispatch clearAllMessages in unmount cleanup useEffect

Fixes CHAT-03: Prevents stale chat data accumulation across sessions
This commit is contained in:
Nuwan 2026-02-08 20:52:17 +05:30
parent f1189af677
commit 5407f19592
2 changed files with 23 additions and 2 deletions

View File

@ -55,7 +55,7 @@ import {
selectBackingTrackData,
selectJamTrackData
} from '../../store/features/activeSessionSlice';
import { addMessageFromWebSocket, uploadAttachment, selectIsUploading, selectUploadError, selectUploadFileName, selectUploadStatus, clearUploadError, fetchChatHistory } from '../../store/features/sessionChatSlice';
import { addMessageFromWebSocket, uploadAttachment, selectIsUploading, selectUploadError, selectUploadFileName, selectUploadStatus, clearUploadError, fetchChatHistory, clearAllMessages } from '../../store/features/sessionChatSlice';
import { validateFile } from '../../services/attachmentValidation';
import { CLIENT_ROLE, RECORD_TYPE_AUDIO, RECORD_TYPE_BOTH } from '../../helpers/globals';
@ -912,6 +912,9 @@ const JKSessionScreen = () => {
// Then perform leave operations
await sessionModel.handleLeaveSession();
// Clear Redux chat state to prevent stale data
dispatch(clearAllMessages());
// Clear Redux session state
dispatch(clearSession());
@ -940,6 +943,9 @@ const JKSessionScreen = () => {
resetMetronome();
}
// Clear Redux chat state to prevent stale data
dispatch(clearAllMessages());
// Clear Redux session state on unmount
dispatch(clearSession());
};

View File

@ -311,6 +311,20 @@ const sessionChatSlice = createSlice({
clearUploadError: (state) => {
state.uploadState.error = null;
state.uploadState.status = 'idle';
},
/**
* Clear all messages when leaving session
* Called from JKSessionScreen when user leaves to prevent stale data
*/
clearAllMessages: (state) => {
state.messagesByChannel = {};
state.unreadCounts = {};
state.fetchStatus = {};
state.fetchError = {};
state.nextCursors = {};
// Preserve lastReadAt for persistence across sessions
// Preserve isWindowOpen and windowPosition for UX continuity
}
},
extraReducers: (builder) => {
@ -552,7 +566,8 @@ export const {
setWindowPosition,
clearSendError,
setUploadStatus,
clearUploadError
clearUploadError,
clearAllMessages
} = sessionChatSlice.actions;
// Phase 7 Plan 3: Memoized selectors using createSelector from Redux Toolkit