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
Этот коммит содержится в:
Joram Wilander
2017-04-26 15:49:15 -04:00
коммит произвёл GitHub
родитель 1fef5bf5fe
Коммит 7307156c49
27 изменённых файлов: 387 добавлений и 390 удалений

Просмотреть файл

@@ -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:
}
});

Просмотреть файл

@@ -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] || {};
}
getMemberInTeam(teamId = this.getCurrentId(), userId) {
return Selectors.getTeamMember(store.getState(), teamId, userId);
}
hasActiveMemberInTeam(teamId = this.getCurrentId(), userId) {
if (this.members_in_team[teamId] && this.members_in_team[teamId][userId]) {
if (this.getMemberInTeam(teamId, userId)) {
return true;
}
return false;
}
hasMemberNotInTeam(teamId = this.getCurrentId(), userId) {
if (this.members_not_in_team[teamId] && this.members_not_in_team[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: