// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved.
// See License.txt for license information.
import ConfirmModal from 'components/confirm_modal.jsx';
import TeamStore from 'stores/team_store.jsx';
import UserStore from 'stores/user_store.jsx';
import Constants from 'utils/constants.jsx';
import * as Utils from 'utils/utils.jsx';
import {updateUserRoles, updateActive} from 'actions/user_actions.jsx';
import {adminResetMfa} from 'actions/admin_actions.jsx';
import {FormattedMessage} from 'react-intl';
import PropTypes from 'prop-types';
import React from 'react';
export default class SystemUsersDropdown extends React.Component {
static propTypes = {
user: PropTypes.object.isRequired,
doPasswordReset: PropTypes.func.isRequired,
doManageTeams: PropTypes.func.isRequired
};
constructor(props) {
super(props);
this.handleMakeMember = this.handleMakeMember.bind(this);
this.handleMakeActive = this.handleMakeActive.bind(this);
this.handleShowDeactivateMemberModal = this.handleShowDeactivateMemberModal.bind(this);
this.handleDeactivateMember = this.handleDeactivateMember.bind(this);
this.handleDeactivateCancel = this.handleDeactivateCancel.bind(this);
this.handleMakeSystemAdmin = this.handleMakeSystemAdmin.bind(this);
this.handleManageTeams = this.handleManageTeams.bind(this);
this.handleResetPassword = this.handleResetPassword.bind(this);
this.handleResetMfa = this.handleResetMfa.bind(this);
this.handleDemoteSystemAdmin = this.handleDemoteSystemAdmin.bind(this);
this.handleDemoteSubmit = this.handleDemoteSubmit.bind(this);
this.handleDemoteCancel = this.handleDemoteCancel.bind(this);
this.renderDeactivateMemberModal = this.renderDeactivateMemberModal.bind(this);
this.state = {
serverError: null,
showDemoteModal: false,
showDeactivateMemberModal: false,
user: null,
role: null
};
}
doMakeMember() {
updateUserRoles(
this.props.user.id,
'system_user',
null,
(err) => {
this.setState({serverError: err.message});
}
);
}
handleMakeMember(e) {
e.preventDefault();
const me = UserStore.getCurrentUser();
if (this.props.user.id === me.id && me.roles.includes('system_admin')) {
this.handleDemoteSystemAdmin(this.props.user, 'member');
} else {
this.doMakeMember();
}
}
handleMakeActive(e) {
e.preventDefault();
updateActive(this.props.user.id, true, null,
(err) => {
this.setState({serverError: err.message});
}
);
}
handleMakeSystemAdmin(e) {
e.preventDefault();
updateUserRoles(
this.props.user.id,
'system_user system_admin',
null,
(err) => {
this.setState({serverError: err.message});
}
);
}
handleManageTeams(e) {
e.preventDefault();
this.props.doManageTeams(this.props.user);
}
handleResetPassword(e) {
e.preventDefault();
this.props.doPasswordReset(this.props.user);
}
handleResetMfa(e) {
e.preventDefault();
adminResetMfa(this.props.user.id,
null,
(err) => {
this.setState({serverError: err.message});
}
);
}
handleDemoteSystemAdmin(user, role) {
this.setState({
serverError: this.state.serverError,
showDemoteModal: true,
user,
role
});
}
handleDemoteCancel() {
this.setState({
serverError: null,
showDemoteModal: false,
user: null,
role: null
});
}
handleDemoteSubmit() {
if (this.state.role === 'member') {
this.doMakeMember();
}
const teamUrl = TeamStore.getCurrentTeamUrl();
if (teamUrl) {
// the channel is added to the URL cause endless loading not being fully fixed
window.location.href = teamUrl + '/channels/town-square';
} else {
window.location.href = '/';
}
}
handleShowDeactivateMemberModal(e) {
e.preventDefault();
this.setState({showDeactivateMemberModal: true});
}
handleDeactivateMember() {
updateActive(this.props.user.id, false, null,
(err) => {
this.setState({serverError: err.message});
}
);
this.setState({showDeactivateMemberModal: false});
}
handleDeactivateCancel() {
this.setState({showDeactivateMemberModal: false});
}
renderDeactivateMemberModal() {
const title = (