// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See LICENSE.txt for license information. import PropTypes from 'prop-types'; import React from 'react'; import {FormattedMessage} from 'react-intl'; import {browserHistory} from 'utils/browser_history'; import {loadMyTeamMembers, updateActive} from 'actions/user_actions.jsx'; import * as Utils from 'utils/utils.jsx'; import ConfirmModal from 'components/confirm_modal.jsx'; export default class TeamMembersDropdown extends React.Component { static propTypes = { user: PropTypes.object.isRequired, currentUser: PropTypes.object.isRequired, currentChannelId: PropTypes.string.isRequired, teamMember: PropTypes.object.isRequired, teamUrl: PropTypes.string.isRequired, actions: PropTypes.shape({ getUser: PropTypes.func.isRequired, getTeamStats: PropTypes.func.isRequired, getChannelStats: PropTypes.func.isRequired, updateTeamMemberSchemeRoles: PropTypes.func.isRequired, removeUserFromTeam: PropTypes.func.isRequired, }).isRequired, } constructor(props) { super(props); this.state = { serverError: null, showDemoteModal: false, user: null, role: null, }; } handleMakeMember = async () => { const me = this.props.currentUser; if (this.props.user.id === me.id && me.roles.includes('system_admin')) { this.handleDemote(this.props.user, 'team_user'); } else { const {error} = await this.props.actions.updateTeamMemberSchemeRoles(this.props.teamMember.team_id, this.props.user.id, true, false); if (error) { this.setState({serverError: error.message}); } else { this.props.actions.getUser(this.props.user.id); if (this.props.user.id === me.id) { loadMyTeamMembers(); } } } } handleRemoveFromTeam = async () => { const {data, error} = await this.props.actions.removeUserFromTeam(this.props.teamMember.team_id, this.props.user.id); if (error) { this.setState({serverError: error.message}); } } handleMakeActive = () => { updateActive(this.props.user.id, true, () => { this.props.actions.getChannelStats(this.props.currentChannelId); 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(this.props.currentChannelId); this.props.actions.getTeamStats(this.props.teamMember.team_id); }, (err) => { this.setState({serverError: err.message}); } ); } handleMakeAdmin = async () => { const me = this.props.currentUser; if (this.props.user.id === me.id && me.roles.includes('system_admin')) { this.handleDemote(this.props.user, 'team_user team_admin'); } else { const {error} = await this.props.actions.updateTeamMemberSchemeRoles(this.props.teamMember.team_id, this.props.user.id, true, true); if (error) { this.setState({serverError: error.message}); } else { this.props.actions.getUser(this.props.user.id); } } } 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 = async () => { const {error} = await this.props.actions.updateTeamMemberSchemeRoles(this.props.teamMember.team_id, this.props.user.id, true, false); if (error) { this.setState({serverError: error.message}); } else { this.props.actions.getUser(this.props.user.id); browserHistory.push(this.props.teamUrl); } } render() { let serverError = null; if (this.state.serverError) { serverError = (
); } const teamMember = this.props.teamMember; const user = this.props.user; let currentRoles = ( ); if ((teamMember.roles.length > 0 && Utils.isAdmin(teamMember.roles)) || teamMember.scheme_admin) { currentRoles = ( ); } if (user.roles.length > 0 && Utils.isSystemAdmin(user.roles)) { currentRoles = ( ); } const me = this.props.currentUser; let showMakeMember = (Utils.isAdmin(teamMember.roles) || teamMember.scheme_admin) && !Utils.isSystemAdmin(user.roles); let showMakeAdmin = !Utils.isAdmin(teamMember.roles) && !Utils.isSystemAdmin(user.roles) && !teamMember.scheme_admin; let showMakeActive = false; let showMakeNotActive = Utils.isSystemAdmin(user.roles); if (user.delete_at > 0) { currentRoles = ( ); showMakeMember = false; showMakeAdmin = false; showMakeActive = true; showMakeNotActive = false; } let makeAdmin = null; if (showMakeAdmin) { makeAdmin = (
  • ); } let makeMember = null; if (showMakeMember) { makeMember = (
  • ); } let removeFromTeam = null; if (this.props.user.id !== me.id) { removeFromTeam = (
  • ); } const makeActive = null; if (showMakeActive) { // makeActive = ( //
  • // // // //
  • // ); } const makeNotActive = null; if (showMakeNotActive) { // makeNotActive = ( //
  • // // // //
  • // ); } let makeDemoteModal = null; if (this.props.user.id === me.id) { const title = ( ); const message = (


    {serverError}
    ); const confirmButton = ( ); makeDemoteModal = ( ); } if (!removeFromTeam && !makeAdmin && !makeMember && !makeActive && !makeNotActive) { return
    {currentRoles}
    ; } return (
      {removeFromTeam} {makeAdmin} {makeMember} {makeActive} {makeNotActive}
    {makeDemoteModal} {serverError}
    ); } }