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
Этот коммит содержится в:
коммит произвёл
GitHub
родитель
1fef5bf5fe
Коммит
7307156c49
@@ -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:
|
||||
|
||||
Ссылка в новой задаче
Block a user