diff --git a/js/models/conversations.js b/js/models/conversations.js index aa4d4b7c9..f90f3e346 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -2276,8 +2276,9 @@ }); this.messageCollection.reset([]); - // no need to do the trigger 'messageDeleted' here - + window.Whisper.events.trigger('conversationReset', { + conversationKey: this.id, + }); // destroy message keeps the active timestamp set so the // conversation still appears on the conversation list but is empty this.set({ diff --git a/ts/components/session/SessionInboxView.tsx b/ts/components/session/SessionInboxView.tsx index abe796795..6b08a7e12 100644 --- a/ts/components/session/SessionInboxView.tsx +++ b/ts/components/session/SessionInboxView.tsx @@ -211,6 +211,7 @@ export class SessionInboxView extends React.Component { messageAdded, messageChanged, messageDeleted, + conversationReset, } = bindActionCreators(conversationActions, this.store.dispatch); window.actionsCreators = conversationActions; const { userChanged } = bindActionCreators( @@ -236,6 +237,7 @@ export class SessionInboxView extends React.Component { window.Whisper.events.on('messageAdded', messageAdded); window.Whisper.events.on('messageDeleted', messageDeleted); window.Whisper.events.on('userChanged', userChanged); + window.Whisper.events.on('conversationReset', conversationReset); this.setState({ isInitialLoadComplete: true }); } diff --git a/ts/state/ducks/conversations.ts b/ts/state/ducks/conversations.ts index 0c1298131..ee30ad509 100644 --- a/ts/state/ducks/conversations.ts +++ b/ts/state/ducks/conversations.ts @@ -211,6 +211,12 @@ export type MessageDeletedActionType = { messageId: string; }; }; +export type ConversationResetActionType = { + type: 'CONVERSATION_RESET'; + payload: { + conversationKey: string; + }; +}; export type SelectedConversationChangedActionType = { type: 'SELECTED_CONVERSATION_CHANGED'; payload: { @@ -231,6 +237,7 @@ export type ConversationActionType = | ConversationAddedActionType | ConversationChangedActionType | ConversationRemovedActionType + | ConversationResetActionType | RemoveAllConversationsActionType | MessageExpiredActionType | MessageAddedActionType @@ -250,6 +257,7 @@ export const actions = { messageExpired, messageAdded, messageDeleted, + conversationReset, messageChanged, fetchMessagesForConversation, openConversationExternal, @@ -349,6 +357,19 @@ function messageDeleted({ }; } +function conversationReset({ + conversationKey, +}: { + conversationKey: string; +}): ConversationResetActionType { + return { + type: 'CONVERSATION_RESET', + payload: { + conversationKey, + }, + }; +} + function openConversationExternal( id: string, messageId?: string @@ -553,5 +574,17 @@ export function reducer( return state; } + if (action.type === 'CONVERSATION_RESET') { + const { conversationKey } = action.payload; + if (conversationKey === state.selectedConversation) { + // just empty the list of messages + return { + ...state, + messages: [], + }; + } + return state; + } + return state; }