diff options
author | Joram Wilander <jwawilander@gmail.com> | 2017-04-26 15:49:15 -0400 |
---|---|---|
committer | GitHub <noreply@github.com> | 2017-04-26 15:49:15 -0400 |
commit | 7307156c49b194c4afd946cd9e57715d45b5b21d (patch) | |
tree | 1601a0026859ff40e631b4aee9632b022ed6f40f /webapp/stores | |
parent | 1fef5bf5fe37f161959fbef5d53deccf0168cced (diff) | |
download | chat-7307156c49b194c4afd946cd9e57715d45b5b21d.tar.gz chat-7307156c49b194c4afd946cd9e57715d45b5b21d.tar.bz2 chat-7307156c49b194c4afd946cd9e57715d45b5b21d.zip |
PLT-6213 Move team store and actions over to use redux (#6222)
* Move team store and actions over to user redux
* Fix JS error when inviting by email
Diffstat (limited to 'webapp/stores')
-rw-r--r-- | webapp/stores/admin_store.jsx | 27 | ||||
-rw-r--r-- | webapp/stores/team_store.jsx | 113 |
2 files changed, 67 insertions, 73 deletions
diff --git a/webapp/stores/admin_store.jsx b/webapp/stores/admin_store.jsx index 8d83dc360..2826e6ddf 100644 --- a/webapp/stores/admin_store.jsx +++ b/webapp/stores/admin_store.jsx @@ -13,6 +13,8 @@ const CONFIG_CHANGE_EVENT = 'config_change'; const ALL_TEAMS_EVENT = 'all_team_change'; const SERVER_COMPLIANCE_REPORT_CHANGE_EVENT = 'server_compliance_reports_change'; +import store from 'stores/redux_store.jsx'; + class AdminStoreClass extends EventEmitter { constructor() { super(); @@ -21,8 +23,19 @@ class AdminStoreClass extends EventEmitter { this.audits = null; this.config = null; this.clusterId = null; - this.teams = {}; this.complianceReports = null; + + this.entities = store.getState().entities.teams; + + store.subscribe(() => { + const newEntities = store.getState().entities.teams; + + if (newEntities.teams !== this.entities.teams) { + this.emitAllTeamsChange(); + } + + this.entities = newEntities; + }); } emitLogChange() { @@ -126,15 +139,11 @@ class AdminStoreClass extends EventEmitter { } getAllTeams() { - return this.teams; - } - - saveAllTeams(teams) { - this.teams = teams; + return store.getState().entities.teams.teams; } getTeam(id) { - return this.teams[id]; + return this.getAllTeams()[id]; } } @@ -161,10 +170,6 @@ AdminStoreClass.dispatchToken = AppDispatcher.register((payload) => { AdminStore.saveClusterId(action.clusterId); AdminStore.emitConfigChange(); break; - case ActionTypes.RECEIVED_ALL_TEAMS: - AdminStore.saveAllTeams(action.teams); - AdminStore.emitAllTeamsChange(); - break; default: } }); diff --git a/webapp/stores/team_store.jsx b/webapp/stores/team_store.jsx index 0317379fc..ac48e4352 100644 --- a/webapp/stores/team_store.jsx +++ b/webapp/stores/team_store.jsx @@ -26,31 +26,33 @@ var Utils; class TeamStoreClass extends EventEmitter { constructor() { super(); - this.clear(); + + this.entities = store.getState().entities.teams; store.subscribe(() => { const newEntities = store.getState().entities.teams; + if (newEntities.currentTeamId !== this.entities.currentTeamId) { + this.emitChange(); + } if (newEntities.teams !== this.entities.teams) { this.emitChange(); } if (newEntities.myMembers !== this.entities.myMembers) { this.emitChange(); + this.emitUnreadChange(); + } + if (newEntities.membersInTeam !== this.entities.membersInTeam) { + this.emitChange(); + } + if (newEntities.stats !== this.entities.stats) { + this.emitStatsChange(); } this.entities = newEntities; }); } - clear() { - this.entities = {}; - this.members_in_team = {}; - this.members_not_in_team = {}; - this.stats = {}; - this.teamListings = {}; - this.currentTeamId = ''; - } - emitChange() { this.emit(CHANGE_EVENT); } @@ -107,15 +109,19 @@ class TeamStoreClass extends EventEmitter { } getAll() { - return store.getState().entities.teams.teams; + const list = Selectors.getMyTeams(store.getState()); + const teams = {}; + list.forEach((t) => { + teams[t.id] = t; + }); + return teams; } getCurrentId() { - return this.currentTeamId; + return Selectors.getCurrentTeamId(store.getState()); } setCurrentId(id) { - this.currentTeamId = id; store.dispatch({ type: TeamTypes.SELECT_TEAM, data: id @@ -123,7 +129,7 @@ class TeamStoreClass extends EventEmitter { } getCurrent() { - const team = this.getAll()[this.currentTeamId]; + const team = Selectors.getCurrentTeam(store.getState()); if (team) { return team; @@ -133,7 +139,7 @@ class TeamStoreClass extends EventEmitter { } getCurrentTeamUrl() { - return this.getTeamUrl(this.currentTeamId); + return this.getTeamUrl(this.getCurrentId()); } getCurrentTeamRelativeUrl() { @@ -171,7 +177,7 @@ class TeamStoreClass extends EventEmitter { let stats; if (teamId) { - stats = this.stats[teamId]; + stats = Selectors.getTeamStats(store.getState())[teamId]; } if (stats) { @@ -199,22 +205,10 @@ class TeamStoreClass extends EventEmitter { updateTeam(team) { const t = JSON.parse(team); - const teams = this.getAll(); + const teams = Object.assign({}, this.getAll(), this.getTeamListings()); if (teams && teams[t.id]) { this.saveTeam(t); } - - if (this.teamListings && this.teamListings[t.id]) { - if (t.allow_open_invite) { - this.teamListings[t.id] = t; - } else { - Reflect.deleteProperty(this.teamListings, t.id); - } - } else if (t.allow_open_invite) { - this.teamListings[t.id] = t; - } - - this.emitChange(); } saveMyTeam(team) { @@ -223,7 +217,10 @@ class TeamStoreClass extends EventEmitter { } saveStats(teamId, stats) { - this.stats[teamId] = stats; + store.dispatch({ + type: TeamTypes.RECEIVED_TEAM_STATS, + data: stats + }); } saveMyTeamMembers(members) { @@ -274,52 +271,37 @@ class TeamStoreClass extends EventEmitter { } saveMembersInTeam(teamId = this.getCurrentId(), members) { - const oldMembers = this.members_in_team[teamId] || {}; - this.members_in_team[teamId] = Object.assign({}, oldMembers, members); - } - - saveMembersNotInTeam(teamId = this.getCurrentId(), nonmembers) { - this.members_not_in_team[teamId] = nonmembers; + store.dispatch({ + type: TeamTypes.RECEIVED_MEMBERS_IN_TEAM, + data: Object.values(members) + }); } removeMemberInTeam(teamId = this.getCurrentId(), userId) { - if (this.members_in_team[teamId]) { - Reflect.deleteProperty(this.members_in_team[teamId], userId); - } - } - - removeMemberNotInTeam(teamId = this.getCurrentId(), userId) { - if (this.members_not_in_team[teamId]) { - Reflect.deleteProperty(this.members_not_in_team[teamId], userId); - } + store.dispatch({ + type: TeamTypes.REMOVE_MEMBER_FROM_TEAM, + data: {team_id: teamId, user_id: userId} + }); } getMembersInTeam(teamId = this.getCurrentId()) { - return Object.assign({}, this.members_in_team[teamId]) || {}; + return Selectors.getMembersInTeams(store.getState())[teamId] || {}; } - hasActiveMemberInTeam(teamId = this.getCurrentId(), userId) { - if (this.members_in_team[teamId] && this.members_in_team[teamId][userId]) { - return true; - } - - return false; + getMemberInTeam(teamId = this.getCurrentId(), userId) { + return Selectors.getTeamMember(store.getState(), teamId, userId); } - hasMemberNotInTeam(teamId = this.getCurrentId(), userId) { - if (this.members_not_in_team[teamId] && this.members_not_in_team[teamId][userId]) { + hasActiveMemberInTeam(teamId = this.getCurrentId(), userId) { + if (this.getMemberInTeam(teamId, userId)) { return true; } return false; } - saveTeamListings(teams) { - this.teamListings = teams; - } - getTeamListings() { - return this.teamListings; + return Selectors.getJoinableTeams(store.getState()); } isTeamAdminForAnyTeam() { @@ -384,6 +366,11 @@ class TeamStoreClass extends EventEmitter { const member = Object.assign({}, this.getMyTeamMembers().filter((m) => m.team_id === id)[0]); member.msg_count++; + + store.dispatch({ + type: TeamTypes.RECEIVED_MY_TEAM_MEMBER, + data: member + }); } incrementMentionsIfNeeded(id, msgProps) { @@ -395,6 +382,11 @@ class TeamStoreClass extends EventEmitter { if (mentions.indexOf(UserStore.getCurrentId()) !== -1) { const member = Object.assign({}, this.getMyTeamMembers().filter((m) => m.team_id === id)[0]); member.mention_count++; + + store.dispatch({ + type: TeamTypes.RECEIVED_MY_TEAM_MEMBER, + data: member + }); } } } @@ -440,9 +432,6 @@ TeamStore.dispatchToken = AppDispatcher.register((payload) => { break; case ActionTypes.RECEIVED_MEMBERS_IN_TEAM: TeamStore.saveMembersInTeam(action.team_id, action.team_members); - if (action.non_team_members) { - TeamStore.saveMembersNotInTeam(action.team_id, action.non_team_members); - } TeamStore.emitChange(); break; case ActionTypes.RECEIVED_TEAM_STATS: |