From cc3a95fdd942370bee31aac67c9476f4c8032f1d Mon Sep 17 00:00:00 2001 From: Nick Frazier Date: Thu, 27 Jul 2017 08:15:50 -0400 Subject: Added websocket event and webapp handler for updating user roles (#6953) --- app/team.go | 9 +++++++++ model/websocket_message.go | 1 + webapp/actions/websocket_actions.jsx | 9 +++++++++ webapp/stores/team_store.jsx | 16 ++++++++++++++++ webapp/utils/constants.jsx | 1 + 5 files changed, 36 insertions(+) diff --git a/app/team.go b/app/team.go index 8f2f7cfcb..bff448f7c 100644 --- a/app/team.go +++ b/app/team.go @@ -164,9 +164,18 @@ func UpdateTeamMemberRoles(teamId string, userId string, newRoles string) (*mode ClearSessionCacheForUser(userId) + sendUpdatedMemberRoleEvent(userId, member) + return member, nil } +func sendUpdatedMemberRoleEvent(userId string, member *model.TeamMember) { + message := model.NewWebSocketEvent(model.WEBSOCKET_EVENT_MEMBERROLE_UPDATED, "", "", userId, nil) + message.Add("member", member.ToJson()) + + go Publish(message) +} + func AddUserToTeam(teamId string, userId string, userRequestorId string) (*model.Team, *model.AppError) { tchan := Srv.Store.Team().Get(teamId) uchan := Srv.Store.User().Get(userId) diff --git a/model/websocket_message.go b/model/websocket_message.go index 3206a2a8d..6b8c03427 100644 --- a/model/websocket_message.go +++ b/model/websocket_message.go @@ -24,6 +24,7 @@ const ( WEBSOCKET_EVENT_UPDATE_TEAM = "update_team" WEBSOCKET_EVENT_USER_ADDED = "user_added" WEBSOCKET_EVENT_USER_UPDATED = "user_updated" + WEBSOCKET_EVENT_MEMBERROLE_UPDATED = "memberrole_updated" WEBSOCKET_EVENT_USER_REMOVED = "user_removed" WEBSOCKET_EVENT_PREFERENCE_CHANGED = "preference_changed" WEBSOCKET_EVENT_PREFERENCES_CHANGED = "preferences_changed" diff --git a/webapp/actions/websocket_actions.jsx b/webapp/actions/websocket_actions.jsx index da64e209d..1e75b1758 100644 --- a/webapp/actions/websocket_actions.jsx +++ b/webapp/actions/websocket_actions.jsx @@ -170,6 +170,10 @@ function handleEvent(msg) { handleUserUpdatedEvent(msg); break; + case SocketEvents.MEMBERROLE_UPDATED: + handleUpdateMemberRoleEvent(msg); + break; + case SocketEvents.CHANNEL_CREATED: handleChannelCreatedEvent(msg); break; @@ -321,6 +325,11 @@ function handleUpdateTeamEvent(msg) { TeamStore.updateTeam(msg.data.team); } +function handleUpdateMemberRoleEvent(msg) { + const member = JSON.parse(msg.data.member); + TeamStore.updateMyRoles(member); +} + function handleDirectAddedEvent(msg) { getChannelAndMyMember(msg.broadcast.channel_id)(dispatch, getState); PreferenceStore.setPreference(Preferences.CATEGORY_DIRECT_CHANNEL_SHOW, msg.data.teammate_id, 'true'); diff --git a/webapp/stores/team_store.jsx b/webapp/stores/team_store.jsx index 7bb9afb63..83a59a32e 100644 --- a/webapp/stores/team_store.jsx +++ b/webapp/stores/team_store.jsx @@ -341,6 +341,22 @@ class TeamStoreClass extends EventEmitter { return false; } + updateMyRoles(member) { + const teamMembers = this.getMyTeamMembers(); + const teamMember = teamMembers.find((m) => m.user_id === member.user_id && m.team_id === member.team_id); + + if (teamMember) { + const newMember = Object.assign({}, teamMember, { + roles: member.roles + }); + + store.dispatch({ + type: TeamTypes.RECEIVED_MY_TEAM_MEMBER, + data: newMember + }); + } + } + subtractUnread(teamId, msgs, mentions) { let member = this.getMyTeamMembers().filter((m) => m.team_id === teamId)[0]; if (member) { diff --git a/webapp/utils/constants.jsx b/webapp/utils/constants.jsx index ddebec293..0ff90087a 100644 --- a/webapp/utils/constants.jsx +++ b/webapp/utils/constants.jsx @@ -233,6 +233,7 @@ export const SocketEvents = { USER_ADDED: 'user_added', USER_REMOVED: 'user_removed', USER_UPDATED: 'user_updated', + MEMBERROLE_UPDATED: 'memberrole_updated', TYPING: 'typing', PREFERENCE_CHANGED: 'preference_changed', PREFERENCES_CHANGED: 'preferences_changed', -- cgit v1.2.3-1-g7c22