* fixes MM-37294 MM-37296 MM-37297 * Added conditions to check for post & thread existence * Update app/mm-redux/selectors/entities/threads.ts Co-authored-by: Kyriakos Z. <3829551+koox00@users.noreply.github.com> * type fix * Never disabling Mark All as unread * Added follow/unfollow message for not yet thread posts * Test case fix for mark all as unread enabled all the time * Removed hardcoded condition * Fixed MM-37509 * Updated snapshot for sidebar Co-authored-by: Kyriakos Z. <3829551+koox00@users.noreply.github.com> Co-authored-by: Mattermod <mattermod@users.noreply.github.com>
63 lines
2.6 KiB
TypeScript
63 lines
2.6 KiB
TypeScript
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
|
|
// See LICENSE.txt for license information.
|
|
import {handleThreadArrived, handleReadChanged, handleAllMarkedRead, handleFollowChanged, getThread as fetchThread} from '@mm-redux/actions/threads';
|
|
import {getCurrentUserId} from '@mm-redux/selectors/entities/common';
|
|
import {getCurrentTeamId} from '@mm-redux/selectors/entities/teams';
|
|
import {getThread} from '@mm-redux/selectors/entities/threads';
|
|
import {ActionResult, DispatchFunc, GetStateFunc} from '@mm-redux/types/actions';
|
|
import {WebSocketMessage} from '@mm-redux/types/websocket';
|
|
|
|
export function handleThreadUpdated(msg: WebSocketMessage) {
|
|
return (dispatch: DispatchFunc): ActionResult => {
|
|
try {
|
|
const threadData = JSON.parse(msg.data.thread);
|
|
dispatch(handleThreadArrived(threadData, msg.broadcast.team_id));
|
|
} catch {
|
|
// does nothing
|
|
}
|
|
|
|
return {data: true};
|
|
};
|
|
}
|
|
|
|
export function handleThreadReadChanged(msg: WebSocketMessage) {
|
|
return (dispatch: DispatchFunc, getState: GetStateFunc): ActionResult => {
|
|
if (msg.data.thread_id) {
|
|
const state = getState();
|
|
const thread = getThread(state, msg.data.thread_id);
|
|
|
|
// Mark only following threads as read.
|
|
if (thread?.is_following) {
|
|
dispatch(
|
|
handleReadChanged(
|
|
msg.data.thread_id,
|
|
msg.broadcast.team_id,
|
|
msg.data.channel_id,
|
|
{
|
|
lastViewedAt: msg.data.timestamp,
|
|
prevUnreadMentions: thread.unread_mentions,
|
|
newUnreadMentions: msg.data.unread_mentions,
|
|
prevUnreadReplies: thread.unread_replies,
|
|
newUnreadReplies: msg.data.unread_replies,
|
|
},
|
|
),
|
|
);
|
|
}
|
|
} else {
|
|
dispatch(handleAllMarkedRead(msg.broadcast.team_id));
|
|
}
|
|
return {data: true};
|
|
};
|
|
}
|
|
|
|
export function handleThreadFollowChanged(msg: WebSocketMessage) {
|
|
return async (dispatch: DispatchFunc, getState: GetStateFunc): Promise<ActionResult> => {
|
|
const state = getState();
|
|
const thread = getThread(state, msg.data.thread_id);
|
|
if (!thread && msg.data.state) {
|
|
await dispatch(fetchThread(getCurrentUserId(state), getCurrentTeamId(state), msg.data.thread_id, true));
|
|
}
|
|
dispatch(handleFollowChanged(msg.data.thread_id, msg.broadcast.team_id, msg.data.state));
|
|
return {data: true};
|
|
};
|
|
}
|