// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import ChannelStore from 'stores/channel_store.jsx'; import TeamStore from 'stores/team_store.jsx'; import UserStore from 'stores/user_store.jsx'; import {removeUserFromChannel, makeUserChannelAdmin, makeUserChannelMember} from 'actions/channel_actions.jsx'; import * as Utils from 'utils/utils.jsx'; import {canManageMembers} from 'utils/channel_utils.jsx'; import {Constants} from 'utils/constants.jsx'; import PropTypes from 'prop-types'; import React from 'react'; import {FormattedMessage} from 'react-intl'; export default class ChannelMembersDropdown extends React.Component { static propTypes = { channel: PropTypes.object.isRequired, user: PropTypes.object.isRequired, teamMember: PropTypes.object.isRequired, channelMember: PropTypes.object.isRequired, actions: PropTypes.shape({ getChannelStats: PropTypes.func.isRequired }).isRequired } constructor(props) { super(props); this.handleRemoveFromChannel = this.handleRemoveFromChannel.bind(this); this.handleMakeChannelMember = this.handleMakeChannelMember.bind(this); this.handleMakeChannelAdmin = this.handleMakeChannelAdmin.bind(this); this.state = { serverError: null, user: null, role: null }; } handleRemoveFromChannel() { removeUserFromChannel( this.props.channel.id, this.props.user.id, () => { this.props.actions.getChannelStats(this.props.channel.id); }, (err) => { this.setState({serverError: err.message}); } ); } handleMakeChannelMember() { makeUserChannelMember( this.props.channel.id, this.props.user.id, () => { this.props.actions.getChannelStats(this.props.channel.id); }, (err) => { this.setState({serverError: err.message}); } ); } handleMakeChannelAdmin() { makeUserChannelAdmin( this.props.channel.id, this.props.user.id, () => { this.props.actions.getChannelStats(this.props.channel.id); }, (err) => { this.setState({serverError: err.message}); } ); } // Checks if the current user has the power to change the roles of this member. canChangeMemberRoles() { if (UserStore.isSystemAdminForCurrentUser()) { return true; } else if (TeamStore.isTeamAdminForCurrentTeam()) { return true; } else if (ChannelStore.isChannelAdminForCurrentChannel()) { return true; } return false; } // Checks if the current user has the power to remove this member from the channel. canRemoveMember() { return canManageMembers(this.props.channel, ChannelStore.isChannelAdminForCurrentChannel(), TeamStore.isTeamAdminForCurrentTeam(), UserStore.isSystemAdminForCurrentUser()); } render() { const supportsChannelAdmin = global.mm_license.IsLicensed === 'true'; const isChannelAdmin = supportsChannelAdmin && Utils.isChannelAdmin(this.props.channelMember.roles); let serverError = null; if (this.state.serverError) { serverError = (
); } if (this.props.user.id === UserStore.getCurrentId()) { return null; } if (this.canChangeMemberRoles()) { let role = ( ); if (isChannelAdmin) { role = ( ); } let removeFromChannel = null; if (this.canRemoveMember() && this.props.channel.name !== Constants.DEFAULT_CHANNEL) { removeFromChannel = (
  • ); } let makeChannelMember = null; if (isChannelAdmin) { makeChannelMember = (
  • ); } let makeChannelAdmin = null; if (supportsChannelAdmin && !isChannelAdmin) { makeChannelAdmin = (
  • ); } if ((makeChannelMember || makeChannelAdmin) && removeFromChannel) { return (
    {role}
      {makeChannelMember} {makeChannelAdmin} {removeFromChannel}
    {serverError}
    ); } } if (this.canRemoveMember() && this.props.channel.name !== Constants.DEFAULT_CHANNEL) { return ( ); } if (isChannelAdmin) { if (this.props.channel.name === Constants.DEFAULT_CHANNEL) { return (
    ); } return (
    ); } if (this.props.channel.name === Constants.DEFAULT_CHANNEL) { return (
    ); } return (
    ); } }