diff options
author | Joram Wilander <jwawilander@gmail.com> | 2017-04-25 11:46:02 -0400 |
---|---|---|
committer | Christopher Speller <crspeller@gmail.com> | 2017-04-25 11:46:02 -0400 |
commit | 6c4c706313eb765eb00c639f381646be74f27b69 (patch) | |
tree | 6068feaa9668dcd74601730ac1a5abfb366402b1 /webapp/stores/team_store.jsx | |
parent | cc07c005074348de87854f1c953a549e8772fa03 (diff) | |
download | chat-6c4c706313eb765eb00c639f381646be74f27b69.tar.gz chat-6c4c706313eb765eb00c639f381646be74f27b69.tar.bz2 chat-6c4c706313eb765eb00c639f381646be74f27b69.zip |
Start moving webapp to Redux (#6140)
* Start moving webapp to Redux
* Fix localforage import
* Updates per feedback
* Feedback udpates and a few fixes
* Minor updates
* Fix statuses, config not loading properly, getMe sanitizing too much
* Fix preferences
* Fix user autocomplete
* Fix sessions and audits
* Fix error handling for all redux actions
* Use new directory structure for components and containers
* Refresh immediately on logout instead of after timeout
* Add fetch polyfill
Diffstat (limited to 'webapp/stores/team_store.jsx')
-rw-r--r-- | webapp/stores/team_store.jsx | 82 |
1 files changed, 59 insertions, 23 deletions
diff --git a/webapp/stores/team_store.jsx b/webapp/stores/team_store.jsx index 85480bdac..1d3d5ff25 100644 --- a/webapp/stores/team_store.jsx +++ b/webapp/stores/team_store.jsx @@ -17,17 +17,33 @@ const CHANGE_EVENT = 'change'; const STATS_EVENT = 'stats'; const UNREAD_EVENT = 'unread'; +import store from 'stores/redux_store.jsx'; +import * as Selectors from 'mattermost-redux/selectors/entities/teams'; +import {TeamTypes} from 'mattermost-redux/action_types'; + var Utils; class TeamStoreClass extends EventEmitter { constructor() { super(); this.clear(); + + store.subscribe(() => { + const newEntities = store.getState().entities.teams; + + if (newEntities.teams !== this.entities.teams) { + this.emitChange(); + } + if (newEntities.myMembers !== this.entities.myMembers) { + this.emitChange(); + } + + this.entities = newEntities; + }); } clear() { - this.teams = {}; - this.my_team_members = []; + this.entities = {}; this.members_in_team = {}; this.members_not_in_team = {}; this.stats = {}; @@ -91,7 +107,7 @@ class TeamStoreClass extends EventEmitter { } getAll() { - return this.teams; + return store.getState().entities.teams.teams; } getCurrentId() { @@ -100,10 +116,14 @@ class TeamStoreClass extends EventEmitter { setCurrentId(id) { this.currentTeamId = id; + store.dispatch({ + type: TeamTypes.SELECT_TEAM, + data: id + }); } getCurrent() { - const team = this.teams[this.currentTeamId]; + const team = this.getAll()[this.currentTeamId]; if (team) { return team; @@ -165,17 +185,21 @@ class TeamStoreClass extends EventEmitter { } saveTeam(team) { - this.teams[team.id] = team; + this.saveTeams([team]); } saveTeams(teams) { - this.teams = teams; + store.dispatch({ + type: TeamTypes.RECEIVED_TEAMS_LIST, + data: teams + }); } updateTeam(team) { const t = JSON.parse(team); - if (this.teams && this.teams[t.id]) { - this.teams[t.id] = t; + const teams = this.getAll(); + if (teams && teams[t.id]) { + this.saveTeam(t); } if (this.teamListings && this.teamListings[t.id]) { @@ -193,7 +217,7 @@ class TeamStoreClass extends EventEmitter { saveMyTeam(team) { this.saveTeam(team); - this.currentTeamId = team.id; + this.setCurrentId(team.id); } saveStats(teamId, stats) { @@ -201,20 +225,26 @@ class TeamStoreClass extends EventEmitter { } saveMyTeamMembers(members) { - this.my_team_members = members; + store.dispatch({ + type: TeamTypes.RECEIVED_MY_TEAM_MEMBERS, + data: members + }); } appendMyTeamMember(member) { - this.my_team_members.push(member); + const members = this.getMyTeamMembers(); + members.push(member); + this.saveMyTeamMembers(members); } saveMyTeamMembersUnread(members) { - for (let i = 0; i < this.my_team_members.length; i++) { - const team = this.my_team_members[i]; + const myMembers = this.getMyTeamMembers(); + for (let i = 0; i < myMembers.length; i++) { + const team = myMembers[i]; const member = members.filter((m) => m.team_id === team.team_id)[0]; if (member) { - this.my_team_members[i] = Object.assign({}, + myMembers[i] = Object.assign({}, team, { msg_count: member.msg_count, @@ -222,19 +252,23 @@ class TeamStoreClass extends EventEmitter { }); } } + + this.saveMyTeamMembers(myMembers); } removeMyTeamMember(teamId) { - for (let i = 0; i < this.my_team_members.length; i++) { - if (this.my_team_members[i].team_id === teamId) { - this.my_team_members.splice(i, 1); + const myMembers = this.getMyTeamMembers(); + for (let i = 0; i < myMembers.length; i++) { + if (myMembers[i].team_id === teamId) { + myMembers.splice(i, 1); } } - this.emitChange(); + + this.saveMyTeamMembers(myMembers); } getMyTeamMembers() { - return this.my_team_members; + return Object.values(Selectors.getTeamMemberships(store.getState())); } saveMembersInTeam(teamId = this.getCurrentId(), members) { @@ -320,19 +354,21 @@ class TeamStoreClass extends EventEmitter { } updateUnreadCount(teamId, totalMsgCount, channelMember) { - const member = this.my_team_members.filter((m) => m.team_id === teamId)[0]; + let member = this.getMyTeamMembers().filter((m) => m.team_id === teamId)[0]; if (member) { + member = Object.assign({}, member); member.msg_count -= (totalMsgCount - channelMember.msg_count); member.mention_count -= channelMember.mention_count; } } subtractUnread(teamId, msgs, mentions) { - const member = this.my_team_members.filter((m) => m.team_id === teamId)[0]; + let member = this.getMyTeamMembers().filter((m) => m.team_id === teamId)[0]; if (member) { const msgCount = member.msg_count - msgs; const mentionCount = member.mention_count - mentions; + member = Object.assign({}, member); member.msg_count = (msgCount > 0) ? msgCount : 0; member.mention_count = (mentionCount > 0) ? mentionCount : 0; } @@ -344,7 +380,7 @@ class TeamStoreClass extends EventEmitter { return; } - const member = this.my_team_members.filter((m) => m.team_id === id)[0]; + const member = Object.assign({}, this.getMyTeamMembers().filter((m) => m.team_id === id)[0]); member.msg_count++; } @@ -355,7 +391,7 @@ class TeamStoreClass extends EventEmitter { } if (mentions.indexOf(UserStore.getCurrentId()) !== -1) { - const member = this.my_team_members.filter((m) => m.team_id === id)[0]; + const member = Object.assign({}, this.getMyTeamMembers().filter((m) => m.team_id === id)[0]); member.mention_count++; } } |