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:
parent
f1189af677
commit
5407f19592
|
|
@ -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());
|
||||
};
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue