summaryrefslogtreecommitdiffstats
path: root/webapp/components
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/components
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/components')
-rw-r--r--webapp/components/admin_console/system_users/index.js27
-rw-r--r--webapp/components/admin_console/system_users/system_users.jsx16
-rw-r--r--webapp/components/analytics/team_analytics/index.js24
-rw-r--r--webapp/components/analytics/team_analytics/team_analytics.jsx (renamed from webapp/components/analytics/team_analytics.jsx)16
-rw-r--r--webapp/components/channel_invite_modal/channel_invite_modal.jsx6
-rw-r--r--webapp/components/channel_invite_modal/index.js4
-rw-r--r--webapp/components/member_list_team/index.js24
-rw-r--r--webapp/components/member_list_team/member_list_team.jsx (renamed from webapp/components/member_list_team.jsx)27
-rw-r--r--webapp/components/select_team/index.js24
-rw-r--r--webapp/components/select_team/select_team.jsx8
-rw-r--r--webapp/components/team_general_tab.jsx8
-rw-r--r--webapp/components/team_members_dropdown/index.js4
-rw-r--r--webapp/components/team_members_dropdown/team_members_dropdown.jsx9
-rw-r--r--webapp/components/team_members_modal.jsx2
-rw-r--r--webapp/components/team_sidebar/index.js24
-rw-r--r--webapp/components/team_sidebar/team_sidebar_controller.jsx9
16 files changed, 190 insertions, 42 deletions
diff --git a/webapp/components/admin_console/system_users/index.js b/webapp/components/admin_console/system_users/index.js
new file mode 100644
index 000000000..24144d701
--- /dev/null
+++ b/webapp/components/admin_console/system_users/index.js
@@ -0,0 +1,27 @@
+// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import {connect} from 'react-redux';
+import {bindActionCreators} from 'redux';
+import {getTeams, getTeamStats} from 'mattermost-redux/actions/teams';
+import {getUser} from 'mattermost-redux/actions/users';
+
+import SystemUsers from './system_users.jsx';
+
+function mapStateToProps(state, ownProps) {
+ return {
+ ...ownProps
+ };
+}
+
+function mapDispatchToProps(dispatch) {
+ return {
+ actions: bindActionCreators({
+ getTeams,
+ getTeamStats,
+ getUser
+ }, dispatch)
+ };
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(SystemUsers);
diff --git a/webapp/components/admin_console/system_users/system_users.jsx b/webapp/components/admin_console/system_users/system_users.jsx
index 7bc4b81ed..29fcd634b 100644
--- a/webapp/components/admin_console/system_users/system_users.jsx
+++ b/webapp/components/admin_console/system_users/system_users.jsx
@@ -16,7 +16,7 @@ import AnalyticsStore from 'stores/analytics_store.jsx';
import TeamStore from 'stores/team_store.jsx';
import UserStore from 'stores/user_store.jsx';
-import {getAllTeams, getStandardAnalytics, getTeamStats, getUser} from 'utils/async_client.jsx';
+import {getStandardAnalytics} from 'utils/async_client.jsx';
import {Constants, StatTypes, UserSearchOptions} from 'utils/constants.jsx';
import {convertTeamMapToList} from 'utils/team_utils.jsx';
import * as Utils from 'utils/utils.jsx';
@@ -33,6 +33,14 @@ const USER_ID_LENGTH = 26;
const USERS_PER_PAGE = 50;
export default class SystemUsers extends React.Component {
+ static propTypes = {
+ actions: React.PropTypes.shape({
+ getTeams: React.PropTypes.func.isRequired,
+ getTeamStats: React.PropTypes.func.isRequired,
+ getUser: React.PropTypes.func.isRequired
+ }).isRequired
+ }
+
constructor(props) {
super(props);
@@ -76,7 +84,7 @@ export default class SystemUsers extends React.Component {
UserStore.addWithoutTeamChangeListener(this.updateUsersFromStore);
this.loadDataForTeam(this.state.teamId);
- getAllTeams();
+ this.props.actions.getTeams(0, 1000);
}
componentWillUpdate(nextProps, nextState) {
@@ -155,7 +163,7 @@ export default class SystemUsers extends React.Component {
loadProfilesWithoutTeam(0, Constants.PROFILE_CHUNK_SIZE, this.loadComplete);
} else {
loadProfilesAndTeamMembers(0, Constants.PROFILE_CHUNK_SIZE, teamId, this.loadComplete);
- getTeamStats(teamId);
+ this.props.actions.getTeamStats(teamId);
}
}
@@ -240,7 +248,7 @@ export default class SystemUsers extends React.Component {
return;
}
- getUser(
+ this.props.actions.getUser(
id,
() => {
this.setState({
diff --git a/webapp/components/analytics/team_analytics/index.js b/webapp/components/analytics/team_analytics/index.js
new file mode 100644
index 000000000..270967a1b
--- /dev/null
+++ b/webapp/components/analytics/team_analytics/index.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import {connect} from 'react-redux';
+import {bindActionCreators} from 'redux';
+import {getTeams} from 'mattermost-redux/actions/teams';
+
+import TeamAnalytics from './team_analytics.jsx';
+
+function mapStateToProps(state, ownProps) {
+ return {
+ ...ownProps
+ };
+}
+
+function mapDispatchToProps(dispatch) {
+ return {
+ actions: bindActionCreators({
+ getTeams
+ }, dispatch)
+ };
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(TeamAnalytics);
diff --git a/webapp/components/analytics/team_analytics.jsx b/webapp/components/analytics/team_analytics/team_analytics.jsx
index 700dc5a10..828f29f51 100644
--- a/webapp/components/analytics/team_analytics.jsx
+++ b/webapp/components/analytics/team_analytics/team_analytics.jsx
@@ -15,14 +15,20 @@ import * as AsyncClient from 'utils/async_client.jsx';
import {StatTypes} from 'utils/constants.jsx';
import {convertTeamMapToList} from 'utils/team_utils.jsx';
-import LineChart from './line_chart.jsx';
-import StatisticCount from './statistic_count.jsx';
-import TableChart from './table_chart.jsx';
-import {formatPostsPerDayData, formatUsersWithPostsPerDayData} from './system_analytics.jsx';
+import LineChart from 'components/analytics/line_chart.jsx';
+import StatisticCount from 'components/analytics/statistic_count.jsx';
+import TableChart from 'components/analytics/table_chart.jsx';
+import {formatPostsPerDayData, formatUsersWithPostsPerDayData} from 'components/analytics/system_analytics.jsx';
const LAST_ANALYTICS_TEAM = 'last_analytics_team';
export default class TeamAnalytics extends React.Component {
+ static propTypes = {
+ actions: React.PropTypes.shape({
+ getTeams: React.PropTypes.func.isRequired
+ }).isRequired
+ }
+
constructor(props) {
super(props);
@@ -50,7 +56,7 @@ export default class TeamAnalytics extends React.Component {
}
if (this.state.teams.length === 0) {
- AsyncClient.getAllTeams();
+ this.props.actions.getTeams(0, 1000);
}
}
diff --git a/webapp/components/channel_invite_modal/channel_invite_modal.jsx b/webapp/components/channel_invite_modal/channel_invite_modal.jsx
index 847af16f6..4be0d23e5 100644
--- a/webapp/components/channel_invite_modal/channel_invite_modal.jsx
+++ b/webapp/components/channel_invite_modal/channel_invite_modal.jsx
@@ -11,7 +11,6 @@ import TeamStore from 'stores/team_store.jsx';
import {searchUsers} from 'actions/user_actions.jsx';
-import * as AsyncClient from 'utils/async_client.jsx';
import * as UserAgent from 'utils/user_agent.jsx';
import Constants from 'utils/constants.jsx';
@@ -29,7 +28,8 @@ export default class ChannelInviteModal extends React.Component {
onHide: React.PropTypes.func.isRequired,
channel: React.PropTypes.object.isRequired,
actions: React.PropTypes.shape({
- getProfilesNotInChannel: React.PropTypes.func.isRequired
+ getProfilesNotInChannel: React.PropTypes.func.isRequired,
+ getTeamStats: React.PropTypes.func.isRequired
}).isRequired
}
@@ -64,7 +64,7 @@ export default class ChannelInviteModal extends React.Component {
UserStore.addStatusesChangeListener(this.onStatusChange);
this.props.actions.getProfilesNotInChannel(TeamStore.getCurrentId(), this.props.channel.id, 0);
- AsyncClient.getTeamStats(TeamStore.getCurrentId());
+ this.props.actions.getTeamStats(TeamStore.getCurrentId());
}
componentWillUnmount() {
diff --git a/webapp/components/channel_invite_modal/index.js b/webapp/components/channel_invite_modal/index.js
index c8bdb54f5..a89a94a4c 100644
--- a/webapp/components/channel_invite_modal/index.js
+++ b/webapp/components/channel_invite_modal/index.js
@@ -4,6 +4,7 @@
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux';
import {getProfilesNotInChannel} from 'mattermost-redux/actions/users';
+import {getTeamStats} from 'mattermost-redux/actions/teams';
import ChannelInviteModal from './channel_invite_modal.jsx';
@@ -16,7 +17,8 @@ function mapStateToProps(state, ownProps) {
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators({
- getProfilesNotInChannel
+ getProfilesNotInChannel,
+ getTeamStats
}, dispatch)
};
}
diff --git a/webapp/components/member_list_team/index.js b/webapp/components/member_list_team/index.js
new file mode 100644
index 000000000..dc5b0b9f2
--- /dev/null
+++ b/webapp/components/member_list_team/index.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import {connect} from 'react-redux';
+import {bindActionCreators} from 'redux';
+import {getTeamStats} from 'mattermost-redux/actions/teams';
+
+import MemberListTeam from './member_list_team.jsx';
+
+function mapStateToProps(state, ownProps) {
+ return {
+ ...ownProps
+ };
+}
+
+function mapDispatchToProps(dispatch) {
+ return {
+ actions: bindActionCreators({
+ getTeamStats
+ }, dispatch)
+ };
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(MemberListTeam);
diff --git a/webapp/components/member_list_team.jsx b/webapp/components/member_list_team/member_list_team.jsx
index 212536dc8..40d65c7f1 100644
--- a/webapp/components/member_list_team.jsx
+++ b/webapp/components/member_list_team/member_list_team.jsx
@@ -8,7 +8,6 @@ import UserStore from 'stores/user_store.jsx';
import TeamStore from 'stores/team_store.jsx';
import {searchUsers, loadProfilesAndTeamMembers, loadTeamMembersForProfilesList} from 'actions/user_actions.jsx';
-import {getTeamStats} from 'utils/async_client.jsx';
import Constants from 'utils/constants.jsx';
@@ -22,11 +21,17 @@ import {searchProfilesInCurrentTeam} from 'mattermost-redux/selectors/entities/u
const USERS_PER_PAGE = 50;
export default class MemberListTeam extends React.Component {
+ static propTypes = {
+ isAdmin: React.PropTypes.bool,
+ actions: React.PropTypes.shape({
+ getTeamStats: React.PropTypes.func.isRequired
+ }).isRequired
+ }
+
constructor(props) {
super(props);
this.onChange = this.onChange.bind(this);
- this.onTeamChange = this.onTeamChange.bind(this);
this.onStatsChange = this.onStatsChange.bind(this);
this.search = this.search.bind(this);
this.loadComplete = this.loadComplete.bind(this);
@@ -45,19 +50,19 @@ export default class MemberListTeam extends React.Component {
}
componentDidMount() {
- UserStore.addInTeamChangeListener(this.onTeamChange);
+ UserStore.addInTeamChangeListener(this.onChange);
UserStore.addStatusesChangeListener(this.onChange);
- TeamStore.addChangeListener(this.onTeamChange);
+ TeamStore.addChangeListener(this.onChange);
TeamStore.addStatsChangeListener(this.onStatsChange);
loadProfilesAndTeamMembers(0, Constants.PROFILE_CHUNK_SIZE, TeamStore.getCurrentId(), this.loadComplete);
- getTeamStats(TeamStore.getCurrentId());
+ this.props.actions.getTeamStats(TeamStore.getCurrentId());
}
componentWillUnmount() {
- UserStore.removeInTeamChangeListener(this.onTeamChange);
+ UserStore.removeInTeamChangeListener(this.onChange);
UserStore.removeStatusesChangeListener(this.onChange);
- TeamStore.removeChangeListener(this.onTeamChange);
+ TeamStore.removeChangeListener(this.onChange);
TeamStore.removeStatsChangeListener(this.onStatsChange);
}
@@ -65,10 +70,6 @@ export default class MemberListTeam extends React.Component {
this.setState({loading: false});
}
- onTeamChange() {
- this.onChange(true);
- }
-
onChange() {
let users;
if (this.term) {
@@ -163,7 +164,3 @@ export default class MemberListTeam extends React.Component {
);
}
}
-
-MemberListTeam.propTypes = {
- isAdmin: React.PropTypes.bool
-};
diff --git a/webapp/components/select_team/index.js b/webapp/components/select_team/index.js
new file mode 100644
index 000000000..87691a853
--- /dev/null
+++ b/webapp/components/select_team/index.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import {connect} from 'react-redux';
+import {bindActionCreators} from 'redux';
+import {getTeams} from 'mattermost-redux/actions/teams';
+
+import SelectTeam from './select_team.jsx';
+
+function mapStateToProps(state, ownProps) {
+ return {
+ ...ownProps
+ };
+}
+
+function mapDispatchToProps(dispatch) {
+ return {
+ actions: bindActionCreators({
+ getTeams
+ }, dispatch)
+ };
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(SelectTeam);
diff --git a/webapp/components/select_team/select_team.jsx b/webapp/components/select_team/select_team.jsx
index 43472bdad..e6179a2fd 100644
--- a/webapp/components/select_team/select_team.jsx
+++ b/webapp/components/select_team/select_team.jsx
@@ -7,7 +7,6 @@ import * as UserAgent from 'utils/user_agent.jsx';
import * as Utils from 'utils/utils.jsx';
import ErrorBar from 'components/error_bar.jsx';
import LoadingScreen from 'components/loading_screen.jsx';
-import * as AsyncClient from 'utils/async_client.jsx';
import * as GlobalActions from 'actions/global_actions.jsx';
import SelectTeamItem from './components/select_team_item.jsx';
@@ -19,6 +18,11 @@ import React from 'react';
import logoImage from 'images/logo.png';
export default class SelectTeam extends React.Component {
+ static propTypes = {
+ actions: React.PropTypes.shape({
+ getTeams: React.PropTypes.func.isRequired
+ }).isRequired
+ }
constructor(props) {
super(props);
@@ -33,7 +37,7 @@ export default class SelectTeam extends React.Component {
componentDidMount() {
TeamStore.addChangeListener(this.onTeamChange);
- AsyncClient.getAllTeamListings();
+ this.props.actions.getTeams(0, 200);
}
componentWillUnmount() {
diff --git a/webapp/components/team_general_tab.jsx b/webapp/components/team_general_tab.jsx
index 21ad6a8a2..0a71546e8 100644
--- a/webapp/components/team_general_tab.jsx
+++ b/webapp/components/team_general_tab.jsx
@@ -86,7 +86,7 @@ class GeneralTab extends React.Component {
var state = {serverError: '', clientError: ''};
- var data = this.props.team;
+ var data = {...this.props.team};
data.allow_open_invite = this.state.allow_open_invite;
updateTeam(data,
() => {
@@ -119,7 +119,7 @@ class GeneralTab extends React.Component {
return;
}
- var data = this.props.team;
+ var data = {...this.props.team};
data.display_name = this.state.name;
updateTeam(data,
() => {
@@ -152,7 +152,7 @@ class GeneralTab extends React.Component {
return;
}
- var data = this.props.team;
+ var data = {...this.props.team};
data.invite_id = this.state.invite_id;
updateTeam(data,
() => {
@@ -189,7 +189,7 @@ class GeneralTab extends React.Component {
return;
}
- var data = this.props.team;
+ var data = {...this.props.team};
data.description = this.state.description;
updateTeam(data,
() => {
diff --git a/webapp/components/team_members_dropdown/index.js b/webapp/components/team_members_dropdown/index.js
index 54e002a6e..9486c89fa 100644
--- a/webapp/components/team_members_dropdown/index.js
+++ b/webapp/components/team_members_dropdown/index.js
@@ -4,6 +4,7 @@
import {connect} from 'react-redux';
import {bindActionCreators} from 'redux';
import {getUser} from 'mattermost-redux/actions/users';
+import {getTeamStats} from 'mattermost-redux/actions/teams';
import TeamMembersDropdown from './team_members_dropdown.jsx';
@@ -16,7 +17,8 @@ function mapStateToProps(state, ownProps) {
function mapDispatchToProps(dispatch) {
return {
actions: bindActionCreators({
- getUser
+ getUser,
+ getTeamStats
}, dispatch)
};
}
diff --git a/webapp/components/team_members_dropdown/team_members_dropdown.jsx b/webapp/components/team_members_dropdown/team_members_dropdown.jsx
index 704a60dae..00441ba37 100644
--- a/webapp/components/team_members_dropdown/team_members_dropdown.jsx
+++ b/webapp/components/team_members_dropdown/team_members_dropdown.jsx
@@ -22,7 +22,8 @@ export default class TeamMembersDropdown extends React.Component {
user: React.PropTypes.object.isRequired,
teamMember: React.PropTypes.object.isRequired,
actions: React.PropTypes.shape({
- getUser: React.PropTypes.func.isRequired
+ getUser: React.PropTypes.func.isRequired,
+ getTeamStats: React.PropTypes.func.isRequired
}).isRequired
}
@@ -76,7 +77,7 @@ export default class TeamMembersDropdown extends React.Component {
() => {
UserStore.removeProfileFromTeam(this.props.teamMember.team_id, this.props.user.id);
UserStore.emitInTeamChange();
- AsyncClient.getTeamStats(this.props.teamMember.team_id);
+ this.props.actions.getTeamStats(this.props.teamMember.team_id);
},
(err) => {
this.setState({serverError: err.message});
@@ -88,7 +89,7 @@ export default class TeamMembersDropdown extends React.Component {
updateActive(this.props.user.id, true,
() => {
AsyncClient.getChannelStats(ChannelStore.getCurrentId());
- AsyncClient.getTeamStats(this.props.teamMember.team_id);
+ this.props.actions.getTeamStats(this.props.teamMember.team_id);
},
(err) => {
this.setState({serverError: err.message});
@@ -100,7 +101,7 @@ export default class TeamMembersDropdown extends React.Component {
updateActive(this.props.user.id, false,
() => {
AsyncClient.getChannelStats(ChannelStore.getCurrentId());
- AsyncClient.getTeamStats(this.props.teamMember.team_id);
+ this.props.actions.getTeamStats(this.props.teamMember.team_id);
},
(err) => {
this.setState({serverError: err.message});
diff --git a/webapp/components/team_members_modal.jsx b/webapp/components/team_members_modal.jsx
index 87b0ff294..a2b963e09 100644
--- a/webapp/components/team_members_modal.jsx
+++ b/webapp/components/team_members_modal.jsx
@@ -1,7 +1,7 @@
// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
-import MemberListTeam from './member_list_team.jsx';
+import MemberListTeam from 'components/member_list_team';
import TeamStore from 'stores/team_store.jsx';
import {FormattedMessage} from 'react-intl';
diff --git a/webapp/components/team_sidebar/index.js b/webapp/components/team_sidebar/index.js
new file mode 100644
index 000000000..d130555fd
--- /dev/null
+++ b/webapp/components/team_sidebar/index.js
@@ -0,0 +1,24 @@
+// Copyright (c) 2017 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import {connect} from 'react-redux';
+import {bindActionCreators} from 'redux';
+import {getTeams} from 'mattermost-redux/actions/teams';
+
+import TeamSidebar from './team_sidebar_controller.jsx';
+
+function mapStateToProps(state, ownProps) {
+ return {
+ ...ownProps
+ };
+}
+
+function mapDispatchToProps(dispatch) {
+ return {
+ actions: bindActionCreators({
+ getTeams
+ }, dispatch)
+ };
+}
+
+export default connect(mapStateToProps, mapDispatchToProps)(TeamSidebar);
diff --git a/webapp/components/team_sidebar/team_sidebar_controller.jsx b/webapp/components/team_sidebar/team_sidebar_controller.jsx
index 758b51426..316466c06 100644
--- a/webapp/components/team_sidebar/team_sidebar_controller.jsx
+++ b/webapp/components/team_sidebar/team_sidebar_controller.jsx
@@ -6,7 +6,6 @@ import TeamButton from './components/team_button.jsx';
import TeamStore from 'stores/team_store.jsx';
import UserStore from 'stores/user_store.jsx';
-import * as AsyncClient from 'utils/async_client.jsx';
import {sortTeamsByDisplayName} from 'utils/team_utils.jsx';
import * as Utils from 'utils/utils.jsx';
@@ -15,6 +14,12 @@ import React from 'react';
import {FormattedMessage} from 'react-intl';
export default class TeamSidebar extends React.Component {
+ static propTypes = {
+ actions: React.PropTypes.shape({
+ getTeams: React.PropTypes.func.isRequired
+ }).isRequired
+ }
+
constructor(props) {
super(props);
@@ -44,7 +49,7 @@ export default class TeamSidebar extends React.Component {
window.addEventListener('resize', this.handleResize);
TeamStore.addChangeListener(this.onChange);
TeamStore.addUnreadChangeListener(this.onChange);
- AsyncClient.getAllTeamListings();
+ this.props.actions.getTeams(0, 200);
this.setStyles();
}