From d5763eac06f866265634b54c3c65106c4190ae48 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Pablo=20V=C3=A9lez?= Date: Fri, 17 Jan 2025 10:25:10 -0500 Subject: [PATCH] MM-62613 - remove scheduled messages on ws reconnect (#29875) * remove scheduled messages on reconnect * loop over values * prune partial state and reload in team change * specifically define when to prune the data --- webapp/channels/src/actions/websocket_actions.jsx | 2 +- .../packages/mattermost-redux/src/actions/scheduled_posts.ts | 3 ++- .../mattermost-redux/src/reducers/entities/scheduled_posts.ts | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/webapp/channels/src/actions/websocket_actions.jsx b/webapp/channels/src/actions/websocket_actions.jsx index b3f20b923c..ed6e1fa0ec 100644 --- a/webapp/channels/src/actions/websocket_actions.jsx +++ b/webapp/channels/src/actions/websocket_actions.jsx @@ -240,7 +240,7 @@ export function reconnect() { } dispatch(fetchAllMyTeamsChannels()); - dispatch(fetchTeamScheduledPosts(currentTeamId, true)); + dispatch(fetchTeamScheduledPosts(currentTeamId, true, true)); dispatch(fetchAllMyChannelMembers()); dispatch(fetchMyCategories(currentTeamId)); loadProfilesForSidebar(); diff --git a/webapp/channels/src/packages/mattermost-redux/src/actions/scheduled_posts.ts b/webapp/channels/src/packages/mattermost-redux/src/actions/scheduled_posts.ts index 20ec4f0184..f9969e12eb 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/actions/scheduled_posts.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/actions/scheduled_posts.ts @@ -31,7 +31,7 @@ export function createSchedulePost(schedulePost: ScheduledPost, teamId: string, }; } -export function fetchTeamScheduledPosts(teamId: string, includeDirectChannels: boolean) { +export function fetchTeamScheduledPosts(teamId: string, includeDirectChannels: boolean, prune?: false) { return async (dispatch: DispatchFunc, getState: GetStateFunc) => { let scheduledPosts; @@ -41,6 +41,7 @@ export function fetchTeamScheduledPosts(teamId: string, includeDirectChannels: b type: ScheduledPostTypes.SCHEDULED_POSTS_RECEIVED, data: { scheduledPostsByTeamId: scheduledPosts.data, + prune, }, }); } catch (error) { diff --git a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/scheduled_posts.ts b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/scheduled_posts.ts index 7bc162e494..5aa0e7b651 100644 --- a/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/scheduled_posts.ts +++ b/webapp/channels/src/packages/mattermost-redux/src/reducers/entities/scheduled_posts.ts @@ -175,8 +175,8 @@ function errorsByTeamId(state: ScheduledPostsState['errorsByTeamId'] = {}, actio function byChannelOrThreadId(state: ScheduledPostsState['byChannelOrThreadId'] = {}, action: MMReduxAction) { switch (action.type) { case ScheduledPostTypes.SCHEDULED_POSTS_RECEIVED: { - const {scheduledPostsByTeamId} = action.data; - const newState = {...state}; + const {scheduledPostsByTeamId, prune} = action.data; + const newState = prune ? {} : {...state}; Object.keys(scheduledPostsByTeamId).forEach((teamId: string) => { if (Object.hasOwn(scheduledPostsByTeamId, teamId)) {