From 06f89cea302bc2d634044cbab6c8a5c5b369ff02 Mon Sep 17 00:00:00 2001 From: Joram Wilander Date: Mon, 13 Feb 2017 15:19:41 -0500 Subject: Final fixes for moving unread handling to client (#5392) --- webapp/client/client.jsx | 9 +++++++++ webapp/routes/route_team.jsx | 7 ++++++- webapp/stores/channel_store.jsx | 5 +++++ webapp/stores/team_store.jsx | 6 ++++++ webapp/tests/client_channel.test.jsx | 15 +++++++++++++++ webapp/utils/async_client.jsx | 29 +++++++++++++++++++++++++++++ 6 files changed, 70 insertions(+), 1 deletion(-) (limited to 'webapp') diff --git a/webapp/client/client.jsx b/webapp/client/client.jsx index 9f1bc926d..478abdcde 100644 --- a/webapp/client/client.jsx +++ b/webapp/client/client.jsx @@ -1469,6 +1469,15 @@ export default class Client { end(this.handleResponse.bind(this, 'getMyChannelMembers', success, error)); } + getMyChannelMembersForTeam(teamId, success, error) { + request. + get(`${this.getTeamsRoute()}/${teamId}/channels/members`). + set(this.defaultHeaders). + type('application/json'). + accept('application/json'). + end(this.handleResponse.bind(this, 'getMyChannelMembersForTeam', success, error)); + } + getChannelByName(channelName, success, error) { request. get(`${this.getChannelsRoute()}/name/${channelName}`). diff --git a/webapp/routes/route_team.jsx b/webapp/routes/route_team.jsx index fe68324c4..cacb8dd20 100644 --- a/webapp/routes/route_team.jsx +++ b/webapp/routes/route_team.jsx @@ -102,7 +102,12 @@ function preNeedsTeam(nextState, replace, callback) { nextState.location.pathname.indexOf('/pl/') > -1) { loadProfilesAndTeamMembersForDMSidebar(); AsyncClient.getMyTeamsUnread(); - AsyncClient.getMyChannelMembers(); + const teams = TeamStore.getAll(); + for (const id in teams) { + if (teams.hasOwnProperty(id)) { + AsyncClient.getMyChannelMembersForTeam(id); + } + } } const d1 = $.Deferred(); //eslint-disable-line new-cap diff --git a/webapp/stores/channel_store.jsx b/webapp/stores/channel_store.jsx index ba6620750..aacc23305 100644 --- a/webapp/stores/channel_store.jsx +++ b/webapp/stores/channel_store.jsx @@ -10,6 +10,7 @@ import UserStore from 'stores/user_store.jsx'; var Utils; import {ActionTypes, Constants} from 'utils/constants.jsx'; const NotificationPrefs = Constants.NotificationPrefs; +const PostTypes = Constants.PostTypes; const CHANGE_EVENT = 'change'; const STATS_EVENT = 'stats'; @@ -500,6 +501,10 @@ ChannelStore.dispatchToken = AppDispatcher.register((payload) => { break; case ActionTypes.RECEIVED_POST: + if (action.post.type === PostTypes.JOIN_LEAVE || action.post.type === PostTypes.JOIN_CHANNEL || action.post.type === PostTypes.LEAVE_CHANNEL) { + return; + } + var id = action.post.channel_id; var teamId = action.websocketMessageProps ? action.websocketMessageProps.team_id : null; diff --git a/webapp/stores/team_store.jsx b/webapp/stores/team_store.jsx index af17f7b6f..b0133e44c 100644 --- a/webapp/stores/team_store.jsx +++ b/webapp/stores/team_store.jsx @@ -8,6 +8,8 @@ import ChannelStore from 'stores/channel_store.jsx'; import Constants from 'utils/constants.jsx'; const NotificationPrefs = Constants.NotificationPrefs; +const PostTypes = Constants.PostTypes; + import {getSiteURL} from 'utils/url.jsx'; const ActionTypes = Constants.ActionTypes; @@ -395,6 +397,10 @@ TeamStore.dispatchToken = AppDispatcher.register((payload) => { } break; case ActionTypes.RECEIVED_POST: + if (action.post.type === PostTypes.JOIN_LEAVE || action.post.type === PostTypes.JOIN_CHANNEL || action.post.type === PostTypes.LEAVE_CHANNEL) { + return; + } + var id = action.websocketMessageProps ? action.websocketMessageProps.team_id : ''; if (TeamStore.getCurrentId() !== id && id.length > 0) { TeamStore.incrementMessages(id, action.post.channel_id); diff --git a/webapp/tests/client_channel.test.jsx b/webapp/tests/client_channel.test.jsx index 02d014a1f..154f70fef 100644 --- a/webapp/tests/client_channel.test.jsx +++ b/webapp/tests/client_channel.test.jsx @@ -352,6 +352,21 @@ describe('Client.Channels', function() { }); }); + it('getMyChannelMembersForTeam', function(done) { + TestHelper.initBasic(() => { + TestHelper.basicClient().getMyChannelMembersForTeam( + TestHelper.basicTeam().id, + function(data) { + assert.equal(data.length > 0, true); + done(); + }, + function(err) { + done(new Error(err.message)); + } + ); + }); + }); + it('getChannelStats', function(done) { TestHelper.initBasic(() => { TestHelper.basicClient().getChannelStats( diff --git a/webapp/utils/async_client.jsx b/webapp/utils/async_client.jsx index cd38be811..d47e45eb9 100644 --- a/webapp/utils/async_client.jsx +++ b/webapp/utils/async_client.jsx @@ -138,6 +138,35 @@ export function getMyChannelMembers() { }); } +export function getMyChannelMembersForTeam(teamId) { + return new Promise((resolve, reject) => { + if (isCallInProgress(`getMyChannelMembers${teamId}`)) { + resolve(); + return; + } + + callTracker[`getMyChannelMembers${teamId}`] = utils.getTimestamp(); + + Client.getMyChannelMembersForTeam( + teamId, + (data) => { + callTracker[`getMyChannelMembers${teamId}`] = 0; + + AppDispatcher.handleServerAction({ + type: ActionTypes.RECEIVED_MY_CHANNEL_MEMBERS, + members: data + }); + resolve(); + }, + (err) => { + callTracker[`getMyChannelMembers${teamId}`] = 0; + dispatchError(err, 'getMyChannelMembersForTeam'); + reject(); + } + ); + }); +} + export function viewChannel(channelId = ChannelStore.getCurrentId(), prevChannelId = '', time = 0) { if (channelId == null || !Client.teamId) { return; -- cgit v1.2.3-1-g7c22