From 62ee5d7a15594d08c0f7bac3927cb1fb2136569f Mon Sep 17 00:00:00 2001 From: JoramWilander Date: Mon, 31 Oct 2016 15:52:49 -0400 Subject: [PATCH] Load channel members with channels to make sure we have latest unread counts --- webapp/actions/channel_actions.jsx | 5 +++++ webapp/actions/global_actions.jsx | 7 ++++--- webapp/actions/websocket_actions.jsx | 8 ++++---- webapp/components/delete_channel_modal.jsx | 4 +++- webapp/components/navbar.jsx | 3 ++- webapp/stores/channel_store.jsx | 1 + webapp/utils/async_client.jsx | 18 +++++++----------- 7 files changed, 26 insertions(+), 20 deletions(-) diff --git a/webapp/actions/channel_actions.jsx b/webapp/actions/channel_actions.jsx index c9c4e68835018..5003d65308140 100644 --- a/webapp/actions/channel_actions.jsx +++ b/webapp/actions/channel_actions.jsx @@ -186,3 +186,8 @@ export function unmarkFavorite(channelId) { AsyncClient.deletePreferences([pref]); } + +export function loadChannelsForCurrentUser() { + AsyncClient.getChannels(); + AsyncClient.getMyChannelMembers(); +} diff --git a/webapp/actions/global_actions.jsx b/webapp/actions/global_actions.jsx index a2c7c341d43af..6a63b56302e5a 100644 --- a/webapp/actions/global_actions.jsx +++ b/webapp/actions/global_actions.jsx @@ -14,6 +14,7 @@ import SearchStore from 'stores/search_store.jsx'; import {handleNewPost, loadPosts, loadPostsBefore, loadPostsAfter} from 'actions/post_actions.jsx'; import {loadProfilesAndTeamMembersForDMSidebar} from 'actions/user_actions.jsx'; +import {loadChannelsForCurrentUser} from 'actions/channel_actions.jsx'; import Constants from 'utils/constants.jsx'; const ActionTypes = Constants.ActionTypes; @@ -42,7 +43,7 @@ export function emitChannelClickEvent(channel) { ); } function switchToChannel(chan) { - AsyncClient.getChannelStats(chan.id); + AsyncClient.getChannelStats(chan.id, true); AsyncClient.updateLastViewedAt(chan.id); loadPosts(chan.id); trackPage(); @@ -140,7 +141,7 @@ export function doFocusPost(channelId, postId, data) { channelId, post_list: data }); - AsyncClient.getChannels(true); + loadChannelsForCurrentUser(); AsyncClient.getMoreChannels(true); AsyncClient.getChannelStats(channelId); loadPostsBefore(postId, 0, Constants.POST_FOCUS_CONTEXT_RADIUS, true); @@ -148,7 +149,7 @@ export function doFocusPost(channelId, postId, data) { } export function emitPostFocusEvent(postId, onSuccess) { - AsyncClient.getChannels(true); + loadChannelsForCurrentUser(); Client.getPermalinkTmp( postId, (data) => { diff --git a/webapp/actions/websocket_actions.jsx b/webapp/actions/websocket_actions.jsx index e58bded0d5bf5..55df5105f72d0 100644 --- a/webapp/actions/websocket_actions.jsx +++ b/webapp/actions/websocket_actions.jsx @@ -20,6 +20,7 @@ import * as AsyncClient from 'utils/async_client.jsx'; import * as GlobalActions from 'actions/global_actions.jsx'; import {handleNewPost, loadPosts} from 'actions/post_actions.jsx'; import {loadProfilesAndTeamMembersForDMSidebar} from 'actions/user_actions.jsx'; +import {loadChannelsForCurrentUser} from 'actions/channel_actions.jsx'; import * as StatusActions from 'actions/status_actions.jsx'; import {Constants, SocketEvents, UserStatuses} from 'utils/constants.jsx'; @@ -75,8 +76,7 @@ function handleFirstConnect() { function handleReconnect() { if (Client.teamId) { - AsyncClient.getChannels(); - AsyncClient.getMyChannelMembers(); + loadChannelsForCurrentUser(); loadPosts(ChannelStore.getCurrentId()); } @@ -234,7 +234,7 @@ function handleUserAddedEvent(msg) { function handleUserRemovedEvent(msg) { if (UserStore.getCurrentId() === msg.broadcast.user_id) { - AsyncClient.getChannels(); + loadChannelsForCurrentUser(); if (msg.data.remover_id !== msg.broadcast.user_id && msg.data.channel_id === ChannelStore.getCurrentId() && @@ -273,7 +273,7 @@ function handleChannelDeletedEvent(msg) { const teamUrl = TeamStore.getCurrentTeamRelativeUrl(); browserHistory.push(teamUrl + '/channels/' + Constants.DEFAULT_CHANNEL); } - AsyncClient.getChannels(); + loadChannelsForCurrentUser(); } function handlePreferenceChangedEvent(msg) { diff --git a/webapp/components/delete_channel_modal.jsx b/webapp/components/delete_channel_modal.jsx index 7ec6fde442283..315a3cd5e1af1 100644 --- a/webapp/components/delete_channel_modal.jsx +++ b/webapp/components/delete_channel_modal.jsx @@ -13,6 +13,8 @@ import {browserHistory} from 'react-router/es6'; import React from 'react'; +import {loadChannelsForCurrentUser} from 'actions/channel_actions.jsx'; + export default class DeleteChannelModal extends React.Component { constructor(props) { super(props); @@ -29,7 +31,7 @@ export default class DeleteChannelModal extends React.Component { Client.deleteChannel( this.props.channel.id, () => { - AsyncClient.getChannels(true); + loadChannelsForCurrentUser(); }, (err) => { AsyncClient.dispatchError(err, 'handleDelete'); diff --git a/webapp/components/navbar.jsx b/webapp/components/navbar.jsx index 9a4475cc22ffb..93d24cdcbbc97 100644 --- a/webapp/components/navbar.jsx +++ b/webapp/components/navbar.jsx @@ -112,7 +112,8 @@ export default class Navbar extends React.Component { Client.leaveChannel(channelId, () => { - AsyncClient.getChannels(true); + ChannelActions.loadChannelsForCurrentUser(); + if (this.state.isFavorite) { ChannelActions.unmarkFavorite(channelId); } diff --git a/webapp/stores/channel_store.jsx b/webapp/stores/channel_store.jsx index f0258d02afd1b..3212c1155ad41 100644 --- a/webapp/stores/channel_store.jsx +++ b/webapp/stores/channel_store.jsx @@ -400,6 +400,7 @@ ChannelStore.dispatchToken = AppDispatcher.register((payload) => { ChannelStore.resetCounts(currentId); } ChannelStore.setUnreadCountsByMembers(action.members); + ChannelStore.emitChange(); break; case ActionTypes.RECEIVED_MORE_CHANNELS: ChannelStore.storeMoreChannels(action.channels); diff --git a/webapp/utils/async_client.jsx b/webapp/utils/async_client.jsx index 67100ea3fd357..a04ba228fcfe3 100644 --- a/webapp/utils/async_client.jsx +++ b/webapp/utils/async_client.jsx @@ -63,7 +63,7 @@ export function checkVersion() { } } -export function getChannels(doVersionCheck) { +export function getChannels() { if (isCallInProgress('getChannels')) { return null; } @@ -74,10 +74,6 @@ export function getChannels(doVersionCheck) { (data) => { callTracker.getChannels = 0; - if (doVersionCheck) { - checkVersion(); - } - AppDispatcher.handleServerAction({ type: ActionTypes.RECEIVED_CHANNELS, channels: data @@ -114,7 +110,7 @@ export function getChannel(id) { ); } -export function getMyChannelMembers(doVersionCheck) { +export function getMyChannelMembers() { if (isCallInProgress('getMyChannelMembers')) { return; } @@ -125,10 +121,6 @@ export function getMyChannelMembers(doVersionCheck) { (data) => { callTracker.getMyChannelMembers = 0; - if (doVersionCheck) { - checkVersion(); - } - AppDispatcher.handleServerAction({ type: ActionTypes.RECEIVED_MY_CHANNEL_MEMBERS, members: data @@ -242,7 +234,7 @@ export function getMoreChannels(force) { } } -export function getChannelStats(channelId = ChannelStore.getCurrentId()) { +export function getChannelStats(channelId = ChannelStore.getCurrentId(), doVersionCheck = false) { if (isCallInProgress('getChannelStats' + channelId)) { return; } @@ -254,6 +246,10 @@ export function getChannelStats(channelId = ChannelStore.getCurrentId()) { (data) => { callTracker['getChannelStats' + channelId] = 0; + if (doVersionCheck) { + checkVersion(); + } + AppDispatcher.handleServerAction({ type: ActionTypes.RECEIVED_CHANNEL_STATS, stats: data