// Copyright (c) 2017-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import React from 'react'; import {Modal} from 'react-bootstrap'; import {FormattedMessage} from 'react-intl'; import * as TeamActions from 'actions/team_actions.jsx'; import Client from 'client/web_client.jsx'; import LoadingScreen from 'components/loading_screen.jsx'; import {sortTeamsByDisplayName} from 'utils/team_utils.jsx'; import * as Utils from 'utils/utils.jsx'; import ManageTeamsDropdown from './manage_teams_dropdown.jsx'; import RemoveFromTeamButton from './remove_from_team_button.jsx'; export default class ManageTeamsModal extends React.Component { static propTypes = { onModalDismissed: React.PropTypes.func.isRequired, show: React.PropTypes.bool.isRequired, user: React.PropTypes.object }; constructor(props) { super(props); this.loadTeamsAndTeamMembers = this.loadTeamsAndTeamMembers.bind(this); this.handleError = this.handleError.bind(this); this.handleMemberChange = this.handleMemberChange.bind(this); this.handleMemberRemove = this.handleMemberRemove.bind(this); this.renderContents = this.renderContents.bind(this); this.state = { error: null, teams: null, teamMembers: null }; } componentDidMount() { if (this.props.user) { this.loadTeamsAndTeamMembers(); } } componentWillReceiveProps(nextProps) { const userId = this.props.user ? this.props.user.id : ''; const nextUserId = nextProps.user ? nextProps.user.id : ''; if (userId !== nextUserId) { this.setState({ teams: null, teamMembers: null }); if (nextProps.user) { this.loadTeamsAndTeamMembers(nextProps.user); } } } loadTeamsAndTeamMembers(user = this.props.user) { TeamActions.getTeamsForUser(user.id, (teams) => { this.setState({ teams: teams.sort(sortTeamsByDisplayName) }); }); TeamActions.getTeamMembersForUser(user.id, (teamMembers) => { this.setState({ teamMembers }); }); } handleError(error) { this.setState({ error }); } handleMemberChange() { TeamActions.getTeamMembersForUser(this.props.user.id, (teamMembers) => { this.setState({ teamMembers }); }); } handleMemberRemove(teamId) { this.setState({ teams: this.state.teams.filter((team) => team.id !== teamId), teamMembers: this.state.teamMembers.filter((teamMember) => teamMember.team_id !== teamId) }); } renderContents() { const {user} = this.props; const {teams, teamMembers} = this.state; if (!user) { return ; } const isSystemAdmin = Utils.isAdmin(user.roles); let name = Utils.getFullName(user); if (name) { name += ` (@${user.username})`; } else { name = `@${user.username}`; } let teamList; if (teams && teamMembers) { teamList = teams.map((team) => { const teamMember = teamMembers.find((member) => member.team_id === team.id); if (!teamMember) { return null; } let action; if (isSystemAdmin) { action = ( ); } else { action = ( ); } return (
{team.display_name}
{action}
); }); } else { teamList = ; } let systemAdminIndicator = null; if (isSystemAdmin) { systemAdminIndicator = (
); } return (
{name}
{user.email}
{systemAdminIndicator}
{teamList}
); } render() { return ( {this.renderContents()} ); } }