summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNick Frazier <nrflaw@gmail.com>2017-07-27 08:15:50 -0400
committerJoram Wilander <jwawilander@gmail.com>2017-07-27 08:15:50 -0400
commitcc3a95fdd942370bee31aac67c9476f4c8032f1d (patch)
tree4a2ddfe6c06d0ee6e85b1ab224ea25e30c2b14bf
parentac5dd4aa7039f1ef00c32e81981d115313a186bc (diff)
downloadchat-cc3a95fdd942370bee31aac67c9476f4c8032f1d.tar.gz
chat-cc3a95fdd942370bee31aac67c9476f4c8032f1d.tar.bz2
chat-cc3a95fdd942370bee31aac67c9476f4c8032f1d.zip
Added websocket event and webapp handler for updating user roles (#6953)
-rw-r--r--app/team.go9
-rw-r--r--model/websocket_message.go1
-rw-r--r--webapp/actions/websocket_actions.jsx9
-rw-r--r--webapp/stores/team_store.jsx16
-rw-r--r--webapp/utils/constants.jsx1
5 files changed, 36 insertions, 0 deletions
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',