// 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 ChannelStore from 'stores/channel_store.jsx'; import {removeUserFromTeam, updateTeamMemberRoles} from 'actions/team_actions.jsx'; import {loadMyTeamMembers, updateActive} from 'actions/user_actions.jsx'; import * as Utils from 'utils/utils.jsx'; import PropTypes from 'prop-types'; import React from 'react'; import {FormattedMessage} from 'react-intl'; import {browserHistory} from 'react-router/es6'; export default class TeamMembersDropdown extends React.Component { static propTypes = { user: PropTypes.object.isRequired, teamMember: PropTypes.object.isRequired, actions: PropTypes.shape({ getUser: PropTypes.func.isRequired, getTeamStats: PropTypes.func.isRequired, getChannelStats: PropTypes.func.isRequired }).isRequired } constructor(props) { super(props); this.handleMakeMember = this.handleMakeMember.bind(this); this.handleRemoveFromTeam = this.handleRemoveFromTeam.bind(this); 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 = { serverError: null, showDemoteModal: false, user: null, role: null }; } handleMakeMember() { const me = UserStore.getCurrentUser(); if (this.props.user.id === me.id && me.roles.includes('system_admin')) { this.handleDemote(this.props.user, 'team_user'); } else { updateTeamMemberRoles( this.props.teamMember.team_id, this.props.user.id, 'team_user', () => { this.props.actions.getUser(this.props.user.id); if (this.props.user.id === me.id) { loadMyTeamMembers(); } }, (err) => { this.setState({serverError: err.message}); } ); } } handleRemoveFromTeam() { removeUserFromTeam( this.props.teamMember.team_id, this.props.user.id, () => { UserStore.removeProfileFromTeam(this.props.teamMember.team_id, this.props.user.id); UserStore.emitInTeamChange(); this.props.actions.getTeamStats(this.props.teamMember.team_id); }, (err) => { this.setState({serverError: err.message}); } ); } handleMakeActive() { updateActive(this.props.user.id, true, () => { this.props.actions.getChannelStats(ChannelStore.getCurrentId()); this.props.actions.getTeamStats(this.props.teamMember.team_id); }, (err) => { this.setState({serverError: err.message}); } ); } handleMakeNotActive() { updateActive(this.props.user.id, false, () => { this.props.actions.getChannelStats(ChannelStore.getCurrentId()); this.props.actions.getTeamStats(this.props.teamMember.team_id); }, (err) => { this.setState({serverError: err.message}); } ); } handleMakeAdmin() { const me = UserStore.getCurrentUser(); if (this.props.user.id === me.id && me.roles.includes('system_admin')) { this.handleDemote(this.props.user, 'team_user team_admin'); } else { updateTeamMemberRoles( this.props.teamMember.team_id, this.props.user.id, 'team_user team_admin', () => { this.props.actions.getUser(this.props.user.id); }, (err) => { this.setState({serverError: err.message}); } ); } } handleDemote(user, role, newRole) { this.setState({ serverError: this.state.serverError, showDemoteModal: true, user, role, newRole }); } handleDemoteCancel() { this.setState({ serverError: null, showDemoteModal: false, user: null, role: null, newRole: null }); } handleDemoteSubmit() { updateTeamMemberRoles( this.props.teamMember.team_id, this.props.user.id, this.state.newRole, () => { this.props.actions.getUser(this.props.user.id); const teamUrl = TeamStore.getCurrentTeamUrl(); if (teamUrl) { browserHistory.push(teamUrl); } else { browserHistory.push('/'); } }, (err) => { this.setState({serverError: err.message}); } ); } render() { let serverError = null; if (this.state.serverError) { serverError = (