Fix DM getting marked unread from your own message (#6373)
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
6e642036f4
Коммит
9625362494
@@ -2,42 +2,10 @@
|
|||||||
// See License.txt for license information.
|
// See License.txt for license information.
|
||||||
|
|
||||||
import * as utils from 'utils/utils.jsx';
|
import * as utils from 'utils/utils.jsx';
|
||||||
|
import {getCountsStateFromStores} from 'utils/channel_utils.jsx';
|
||||||
import ChannelStore from 'stores/channel_store.jsx';
|
import ChannelStore from 'stores/channel_store.jsx';
|
||||||
import TeamStore from 'stores/team_store.jsx';
|
import TeamStore from 'stores/team_store.jsx';
|
||||||
|
|
||||||
function getCountsStateFromStores() {
|
|
||||||
let mentionCount = 0;
|
|
||||||
let messageCount = 0;
|
|
||||||
const teamMembers = TeamStore.getMyTeamMembers();
|
|
||||||
const channels = ChannelStore.getAll();
|
|
||||||
const members = ChannelStore.getMyMembers();
|
|
||||||
|
|
||||||
teamMembers.forEach((member) => {
|
|
||||||
if (member.team_id !== TeamStore.getCurrentId()) {
|
|
||||||
mentionCount += (member.mention_count || 0);
|
|
||||||
messageCount += (member.msg_count || 0);
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
channels.forEach((channel) => {
|
|
||||||
const channelMember = members[channel.id];
|
|
||||||
if (channelMember == null) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (channel.type === 'D') {
|
|
||||||
mentionCount += channel.total_msg_count - channelMember.msg_count;
|
|
||||||
} else if (channelMember.mention_count > 0) {
|
|
||||||
mentionCount += channelMember.mention_count;
|
|
||||||
}
|
|
||||||
if (channelMember.notify_props.mark_unread !== 'mention' && channel.total_msg_count - channelMember.msg_count > 0) {
|
|
||||||
messageCount += 1;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return {mentionCount, messageCount};
|
|
||||||
}
|
|
||||||
|
|
||||||
import React from 'react';
|
import React from 'react';
|
||||||
|
|
||||||
export default class NotifyCounts extends React.Component {
|
export default class NotifyCounts extends React.Component {
|
||||||
|
|||||||
@@ -90,28 +90,8 @@ export default class Sidebar extends React.Component {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getTotalUnreadCount() {
|
getTotalUnreadCount() {
|
||||||
let msgs = 0;
|
const unreads = ChannelUtils.getCountsStateFromStores(this.state.currentTeam, this.state.teamMembers, this.state.unreadCounts);
|
||||||
let mentions = 0;
|
return {msgs: unreads.messageCount, mentions: unreads.mentionCount};
|
||||||
const unreadCounts = this.state.unreadCounts;
|
|
||||||
const teamMembers = this.state.teamMembers;
|
|
||||||
|
|
||||||
teamMembers.forEach((member) => {
|
|
||||||
if (member.team_id !== this.state.currentTeam.id) {
|
|
||||||
msgs += member.msg_count || 0;
|
|
||||||
mentions += member.mention_count || 0;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
Object.keys(unreadCounts).forEach((chId) => {
|
|
||||||
const channel = ChannelStore.get(chId);
|
|
||||||
|
|
||||||
if (channel && (channel.type === Constants.DM_CHANNEL || channel.type === Constants.GM_CHANNEL || channel.team_id === this.state.currentTeam.id)) {
|
|
||||||
msgs += unreadCounts[chId].msgs;
|
|
||||||
mentions += unreadCounts[chId].mentions;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
return {msgs, mentions};
|
|
||||||
}
|
}
|
||||||
|
|
||||||
getStateFromStores() {
|
getStateFromStores() {
|
||||||
|
|||||||
@@ -20,6 +20,7 @@ const LAST_VIEVED_EVENT = 'last_viewed';
|
|||||||
import store from 'stores/redux_store.jsx';
|
import store from 'stores/redux_store.jsx';
|
||||||
import * as Selectors from 'mattermost-redux/selectors/entities/channels';
|
import * as Selectors from 'mattermost-redux/selectors/entities/channels';
|
||||||
import {ChannelTypes, UserTypes} from 'mattermost-redux/action_types';
|
import {ChannelTypes, UserTypes} from 'mattermost-redux/action_types';
|
||||||
|
import {batchActions} from 'redux-batched-actions';
|
||||||
|
|
||||||
class ChannelStoreClass extends EventEmitter {
|
class ChannelStoreClass extends EventEmitter {
|
||||||
constructor(props) {
|
constructor(props) {
|
||||||
@@ -456,16 +457,22 @@ class ChannelStoreClass extends EventEmitter {
|
|||||||
|
|
||||||
const channel = {...this.get(id)};
|
const channel = {...this.get(id)};
|
||||||
channel.total_msg_count++;
|
channel.total_msg_count++;
|
||||||
store.dispatch({
|
|
||||||
type: ChannelTypes.RECEIVED_CHANNEL,
|
|
||||||
data: channel
|
|
||||||
});
|
|
||||||
|
|
||||||
|
const actions = [];
|
||||||
if (markRead) {
|
if (markRead) {
|
||||||
this.resetCounts([id]);
|
actions.push({
|
||||||
} else {
|
type: ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER,
|
||||||
this.unreadCounts[id].msgs++;
|
data: {...member, msg_count: channel.total_msg_count}
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
actions.push(
|
||||||
|
{
|
||||||
|
type: ChannelTypes.RECEIVED_CHANNEL,
|
||||||
|
data: channel
|
||||||
|
}
|
||||||
|
);
|
||||||
|
store.dispatch(batchActions(actions));
|
||||||
}
|
}
|
||||||
|
|
||||||
incrementMentionsIfNeeded(id, msgProps) {
|
incrementMentionsIfNeeded(id, msgProps) {
|
||||||
|
|||||||
@@ -5,6 +5,8 @@ const Preferences = Constants.Preferences;
|
|||||||
import * as Utils from 'utils/utils.jsx';
|
import * as Utils from 'utils/utils.jsx';
|
||||||
|
|
||||||
import UserStore from 'stores/user_store.jsx';
|
import UserStore from 'stores/user_store.jsx';
|
||||||
|
import ChannelStore from 'stores/channel_store.jsx';
|
||||||
|
import TeamStore from 'stores/team_store.jsx';
|
||||||
import PreferenceStore from 'stores/preference_store.jsx';
|
import PreferenceStore from 'stores/preference_store.jsx';
|
||||||
import LocalizationStore from 'stores/localization_store.jsx';
|
import LocalizationStore from 'stores/localization_store.jsx';
|
||||||
|
|
||||||
@@ -251,6 +253,29 @@ export function buildGroupChannelName(channelId) {
|
|||||||
return displayName;
|
return displayName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getCountsStateFromStores(team = TeamStore.getCurrent(), teamMembers = TeamStore.getMyTeamMembers(), unreadCounts = ChannelStore.getUnreadCounts()) {
|
||||||
|
let mentionCount = 0;
|
||||||
|
let messageCount = 0;
|
||||||
|
|
||||||
|
teamMembers.forEach((member) => {
|
||||||
|
if (member.team_id !== TeamStore.getCurrentId()) {
|
||||||
|
mentionCount += (member.mention_count || 0);
|
||||||
|
messageCount += (member.msg_count || 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
Object.keys(unreadCounts).forEach((chId) => {
|
||||||
|
const channel = ChannelStore.get(chId);
|
||||||
|
|
||||||
|
if (channel && (channel.type === Constants.DM_CHANNEL || channel.type === Constants.GM_CHANNEL || channel.team_id === team.id)) {
|
||||||
|
messageCount += unreadCounts[chId].msgs;
|
||||||
|
mentionCount += unreadCounts[chId].mentions;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return {mentionCount, messageCount};
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* not exported helpers
|
* not exported helpers
|
||||||
*/
|
*/
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user