summaryrefslogtreecommitdiffstats
path: root/webapp
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2017-05-10 07:41:12 -0400
committerGitHub <noreply@github.com>2017-05-10 07:41:12 -0400
commit9625362494888c9423bb6503b7e18557b6b9cc79 (patch)
tree976611e0ee7fff14dd13e044c571c370f5895392 /webapp
parent6e642036f460fb2e28572d46ca29aa81fbc8c8d1 (diff)
downloadchat-9625362494888c9423bb6503b7e18557b6b9cc79.tar.gz
chat-9625362494888c9423bb6503b7e18557b6b9cc79.tar.bz2
chat-9625362494888c9423bb6503b7e18557b6b9cc79.zip
Fix DM getting marked unread from your own message (#6373)
Diffstat (limited to 'webapp')
-rw-r--r--webapp/components/notify_counts.jsx34
-rw-r--r--webapp/components/sidebar.jsx24
-rw-r--r--webapp/stores/channel_store.jsx21
-rw-r--r--webapp/utils/channel_utils.jsx25
4 files changed, 42 insertions, 62 deletions
diff --git a/webapp/components/notify_counts.jsx b/webapp/components/notify_counts.jsx
index dda352349..f05ecbf12 100644
--- a/webapp/components/notify_counts.jsx
+++ b/webapp/components/notify_counts.jsx
@@ -2,42 +2,10 @@
// See License.txt for license information.
import * as utils from 'utils/utils.jsx';
+import {getCountsStateFromStores} from 'utils/channel_utils.jsx';
import ChannelStore from 'stores/channel_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';
export default class NotifyCounts extends React.Component {
diff --git a/webapp/components/sidebar.jsx b/webapp/components/sidebar.jsx
index aa7b98be0..5784f96ba 100644
--- a/webapp/components/sidebar.jsx
+++ b/webapp/components/sidebar.jsx
@@ -90,28 +90,8 @@ export default class Sidebar extends React.Component {
}
getTotalUnreadCount() {
- let msgs = 0;
- let mentions = 0;
- 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};
+ const unreads = ChannelUtils.getCountsStateFromStores(this.state.currentTeam, this.state.teamMembers, this.state.unreadCounts);
+ return {msgs: unreads.messageCount, mentions: unreads.mentionCount};
}
getStateFromStores() {
diff --git a/webapp/stores/channel_store.jsx b/webapp/stores/channel_store.jsx
index db1bead46..58a7dfb78 100644
--- a/webapp/stores/channel_store.jsx
+++ b/webapp/stores/channel_store.jsx
@@ -20,6 +20,7 @@ const LAST_VIEVED_EVENT = 'last_viewed';
import store from 'stores/redux_store.jsx';
import * as Selectors from 'mattermost-redux/selectors/entities/channels';
import {ChannelTypes, UserTypes} from 'mattermost-redux/action_types';
+import {batchActions} from 'redux-batched-actions';
class ChannelStoreClass extends EventEmitter {
constructor(props) {
@@ -456,16 +457,22 @@ class ChannelStoreClass extends EventEmitter {
const channel = {...this.get(id)};
channel.total_msg_count++;
- store.dispatch({
- type: ChannelTypes.RECEIVED_CHANNEL,
- data: channel
- });
+ const actions = [];
if (markRead) {
- this.resetCounts([id]);
- } else {
- this.unreadCounts[id].msgs++;
+ actions.push({
+ type: ChannelTypes.RECEIVED_MY_CHANNEL_MEMBER,
+ data: {...member, msg_count: channel.total_msg_count}
+ });
}
+
+ actions.push(
+ {
+ type: ChannelTypes.RECEIVED_CHANNEL,
+ data: channel
+ }
+ );
+ store.dispatch(batchActions(actions));
}
incrementMentionsIfNeeded(id, msgProps) {
diff --git a/webapp/utils/channel_utils.jsx b/webapp/utils/channel_utils.jsx
index 10d06fbe1..1afce39b4 100644
--- a/webapp/utils/channel_utils.jsx
+++ b/webapp/utils/channel_utils.jsx
@@ -5,6 +5,8 @@ const Preferences = Constants.Preferences;
import * as Utils from 'utils/utils.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 LocalizationStore from 'stores/localization_store.jsx';
@@ -251,6 +253,29 @@ export function buildGroupChannelName(channelId) {
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
*/