summaryrefslogtreecommitdiffstats
path: root/webapp/stores
diff options
context:
space:
mode:
authorJoram Wilander <jwawilander@gmail.com>2017-04-26 15:49:15 -0400
committerGitHub <noreply@github.com>2017-04-26 15:49:15 -0400
commit7307156c49b194c4afd946cd9e57715d45b5b21d (patch)
tree1601a0026859ff40e631b4aee9632b022ed6f40f /webapp/stores
parent1fef5bf5fe37f161959fbef5d53deccf0168cced (diff)
downloadchat-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.jsx27
-rw-r--r--webapp/stores/team_store.jsx113
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: