summaryrefslogtreecommitdiffstats
path: root/web/react
diff options
context:
space:
mode:
authorCorey Hulen <corey@hulen.com>2016-02-14 07:55:45 -0800
committerCorey Hulen <corey@hulen.com>2016-02-14 07:55:45 -0800
commit2ec3762fb2e0140649d138006323b35726b9b213 (patch)
treee3e99de94902484a4f5af0a06a9614d2f8b9eadb /web/react
parent6ef0be3cf26bee000ed6e53fa1e1bb335b8a5314 (diff)
parent9bf8734bd109ad64c0fff2bb80e69011f7ad8972 (diff)
downloadchat-2ec3762fb2e0140649d138006323b35726b9b213.tar.gz
chat-2ec3762fb2e0140649d138006323b35726b9b213.tar.bz2
chat-2ec3762fb2e0140649d138006323b35726b9b213.zip
Merge pull request #2146 from ttyniwa/feature/PLT-1908
PLT-1908 Add a warning when demoting yourself from System Administrator from the team Manage Members menu
Diffstat (limited to 'web/react')
-rw-r--r--web/react/components/member_list_team_item.jsx127
1 files changed, 110 insertions, 17 deletions
diff --git a/web/react/components/member_list_team_item.jsx b/web/react/components/member_list_team_item.jsx
index 30086d1b2..7b1f6170d 100644
--- a/web/react/components/member_list_team_item.jsx
+++ b/web/react/components/member_list_team_item.jsx
@@ -5,8 +5,29 @@ import UserStore from '../stores/user_store.jsx';
import * as Client from '../utils/client.jsx';
import * as AsyncClient from '../utils/async_client.jsx';
import * as Utils from '../utils/utils.jsx';
+import ConfirmModal from './confirm_modal.jsx';
+import TeamStore from '../stores/team_store.jsx';
-import {FormattedMessage} from 'mm-intl';
+import {injectIntl, intlShape, defineMessages, FormattedMessage} from 'mm-intl';
+
+var holders = defineMessages({
+ confirmDemoteRoleTitle: {
+ id: 'member_team_item.confirmDemoteRoleTitle',
+ defaultMessage: 'Confirm demotion from System Admin role'
+ },
+ confirmDemotion: {
+ id: 'member_team_item.confirmDemotion',
+ defaultMessage: 'Confirm Demotion'
+ },
+ confirmDemoteDescription: {
+ id: 'member_team_item.confirmDemoteDescription',
+ defaultMessage: 'If you demote yourself from the System Admin role and there is not another user with System Admin privileges, you\'ll need to re-assign a System Admin by accessing the Mattermost server through a terminal and running the following command.'
+ },
+ confirmDemotionCmd: {
+ id: 'member_team_item.confirmDemotionCmd',
+ defaultMessage: 'platform -assign_role -team_name="yourteam" -email="name@yourcompany.com" -role="system_admin"'
+ }
+});
export default class MemberListTeamItem extends React.Component {
constructor(props) {
@@ -16,23 +37,35 @@ export default class MemberListTeamItem extends React.Component {
this.handleMakeActive = this.handleMakeActive.bind(this);
this.handleMakeNotActive = this.handleMakeNotActive.bind(this);
this.handleMakeAdmin = this.handleMakeAdmin.bind(this);
+ this.handleDemote = this.handleDemote.bind(this);
+ this.handleDemoteSubmit = this.handleDemoteSubmit.bind(this);
+ this.handleDemoteCancel = this.handleDemoteCancel.bind(this);
- this.state = {};
+ this.state = {
+ serverError: null,
+ showDemoteModal: false,
+ user: null,
+ role: null
+ };
}
handleMakeMember() {
- const data = {
- user_id: this.props.user.id,
- new_roles: ''
- };
-
- Client.updateRoles(data,
- () => {
- AsyncClient.getProfiles();
- },
- (err) => {
- this.setState({serverError: err.message});
- }
- );
+ const me = UserStore.getCurrentUser();
+ if (this.props.user.id === me.id) {
+ this.handleDemote(this.props.user, '');
+ } else {
+ const data = {
+ user_id: this.props.user.id,
+ new_roles: ''
+ };
+ Client.updateRoles(data,
+ () => {
+ AsyncClient.getProfiles();
+ },
+ (err) => {
+ this.setState({serverError: err.message});
+ }
+ );
+ }
}
handleMakeActive() {
Client.updateActive(this.props.user.id, true,
@@ -55,14 +88,55 @@ export default class MemberListTeamItem extends React.Component {
);
}
handleMakeAdmin() {
+ const me = UserStore.getCurrentUser();
+ if (this.props.user.id === me.id) {
+ this.handleDemote(this.props.user, 'admin');
+ } else {
+ const data = {
+ user_id: this.props.user.id,
+ new_roles: 'admin'
+ };
+
+ Client.updateRoles(data,
+ () => {
+ AsyncClient.getProfiles();
+ },
+ (err) => {
+ this.setState({serverError: err.message});
+ }
+ );
+ }
+ }
+ handleDemote(user, role) {
+ this.setState({
+ serverError: this.state.serverError,
+ showDemoteModal: true,
+ user,
+ role
+ });
+ }
+ handleDemoteCancel() {
+ this.setState({
+ serverError: null,
+ showDemoteModal: false,
+ user: null,
+ role: null
+ });
+ }
+ handleDemoteSubmit() {
const data = {
user_id: this.props.user.id,
- new_roles: 'admin'
+ new_roles: this.state.role
};
Client.updateRoles(data,
() => {
- AsyncClient.getProfiles();
+ const teamUrl = TeamStore.getCurrentTeamUrl();
+ if (teamUrl) {
+ window.location.href = teamUrl;
+ } else {
+ window.location.href = '/';
+ }
},
(err) => {
this.setState({serverError: err.message});
@@ -198,6 +272,21 @@ export default class MemberListTeamItem extends React.Component {
</li>
);
}
+ const me = UserStore.getCurrentUser();
+ const {formatMessage} = this.props.intl;
+ let makeDemoteModal = null;
+ if (this.props.user.id === me.id) {
+ makeDemoteModal = (
+ <ConfirmModal
+ show={this.state.showDemoteModal}
+ title={formatMessage(holders.confirmDemoteRoleTitle)}
+ message={[formatMessage(holders.confirmDemoteDescription), React.createElement('br'), React.createElement('br'), formatMessage(holders.confirmDemotionCmd), serverError]}
+ confirm_button={formatMessage(holders.confirmDemotion)}
+ onConfirm={this.handleDemoteSubmit}
+ onCancel={this.handleDemoteCancel}
+ />
+ );
+ }
return (
<tr>
@@ -231,6 +320,7 @@ export default class MemberListTeamItem extends React.Component {
{makeNotActive}
</ul>
</div>
+ {makeDemoteModal}
{serverError}
</td>
</tr>
@@ -239,5 +329,8 @@ export default class MemberListTeamItem extends React.Component {
}
MemberListTeamItem.propTypes = {
+ intl: intlShape.isRequired,
user: React.PropTypes.object.isRequired
};
+
+export default injectIntl(MemberListTeamItem);