// Copyright (c) 2015-present Mattermost, Inc. All Rights Reserved. // See License.txt for license information. import $ from 'jquery'; import ReactDOM from 'react-dom'; import * as UserAgent from 'utils/user_agent.jsx'; import * as Utils from 'utils/utils.jsx'; import * as GlobalActions from 'actions/global_actions.jsx'; import TeamStore from 'stores/team_store.jsx'; import UserStore from 'stores/user_store.jsx'; import WebrtcStore from 'stores/webrtc_store.jsx'; import AboutBuildModal from './about_build_modal.jsx'; import SidebarHeaderDropdownButton from './sidebar_header_dropdown_button.jsx'; import TeamMembersModal from './team_members_modal.jsx'; import UserSettingsModal from './user_settings/user_settings_modal.jsx'; import AddUsersToTeam from './add_users_to_team.jsx'; import {Constants, WebrtcActionTypes} from 'utils/constants.jsx'; import {Dropdown} from 'react-bootstrap'; import {FormattedMessage} from 'react-intl'; import {Link} from 'react-router/es6'; import React from 'react'; export default class SidebarHeaderDropdown extends React.Component { static propTypes = { teamType: React.PropTypes.string, teamDisplayName: React.PropTypes.string, teamName: React.PropTypes.string, currentUser: React.PropTypes.object }; static defaultProps = { teamType: '' }; constructor(props) { super(props); this.toggleDropdown = this.toggleDropdown.bind(this); this.handleAboutModal = this.handleAboutModal.bind(this); this.aboutModalDismissed = this.aboutModalDismissed.bind(this); this.toggleAccountSettingsModal = this.toggleAccountSettingsModal.bind(this); this.showAddUsersToTeamModal = this.showAddUsersToTeamModal.bind(this); this.hideAddUsersToTeamModal = this.hideAddUsersToTeamModal.bind(this); this.showInviteMemberModal = this.showInviteMemberModal.bind(this); this.showGetTeamInviteLinkModal = this.showGetTeamInviteLinkModal.bind(this); this.showTeamMembersModal = this.showTeamMembersModal.bind(this); this.hideTeamMembersModal = this.hideTeamMembersModal.bind(this); this.onTeamChange = this.onTeamChange.bind(this); this.openAccountSettings = this.openAccountSettings.bind(this); this.renderCustomEmojiLink = this.renderCustomEmojiLink.bind(this); this.handleClick = this.handleClick.bind(this); this.state = { teamMembers: TeamStore.getMyTeamMembers(), teamListings: TeamStore.getTeamListings(), showAboutModal: false, showDropdown: false, showTeamMembersModal: false, showUserSettingsModal: false, showAddUsersToTeamModal: false }; } handleClick(e) { if (WebrtcStore.isBusy()) { WebrtcStore.emitChanged({action: WebrtcActionTypes.IN_PROGRESS}); e.preventDefault(); } } toggleDropdown(e) { if (e) { e.preventDefault(); } this.setState({showDropdown: !this.state.showDropdown}); } handleAboutModal(e) { e.preventDefault(); this.setState({ showAboutModal: true, showDropdown: false }); } aboutModalDismissed() { this.setState({showAboutModal: false}); } toggleAccountSettingsModal(e) { e.preventDefault(); this.setState({ showUserSettingsModal: !this.state.showUserSettingsModal, showDropdown: false }); } showAddUsersToTeamModal(e) { e.preventDefault(); this.setState({ showAddUsersToTeamModal: true, showDropdown: false }); } hideAddUsersToTeamModal() { this.setState({ showAddUsersToTeamModal: false }); } showInviteMemberModal(e) { e.preventDefault(); this.setState({showDropdown: false}); GlobalActions.showInviteMemberModal(); } showGetTeamInviteLinkModal(e) { e.preventDefault(); this.setState({showDropdown: false}); GlobalActions.showGetTeamInviteLinkModal(); } showTeamMembersModal(e) { e.preventDefault(); this.setState({ showTeamMembersModal: true }); } hideTeamMembersModal() { this.setState({ showTeamMembersModal: false }); } componentDidMount() { TeamStore.addChangeListener(this.onTeamChange); document.addEventListener('keydown', this.openAccountSettings); } onTeamChange() { this.setState({ teamMembers: TeamStore.getMyTeamMembers(), teamListings: TeamStore.getTeamListings() }); } componentWillUnmount() { $(ReactDOM.findDOMNode(this.refs.dropdown)).off('hide.bs.dropdown'); TeamStore.removeChangeListener(this.onTeamChange); document.removeEventListener('keydown', this.openAccountSettings); } openAccountSettings(e) { if (Utils.cmdOrCtrlPressed(e) && e.shiftKey && e.keyCode === Constants.KeyCodes.A) { this.toggleAccountSettingsModal(e); } } renderCustomEmojiLink() { if (window.mm_config.EnableCustomEmoji !== 'true' || !Utils.canCreateCustomEmoji(this.props.currentUser)) { return null; } return (
  • ); } render() { const config = global.mm_config; const currentUser = this.props.currentUser; let teamLink = ''; let inviteLink = ''; let addMemberToTeam = ''; let manageLink = ''; let sysAdminLink = ''; let isAdmin = false; let isSystemAdmin = false; let teamSettings = null; let integrationsLink = null; if (!currentUser) { return null; } if (currentUser != null) { isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser(); isSystemAdmin = UserStore.isSystemAdminForCurrentUser(); inviteLink = (
  • ); addMemberToTeam = (
  • ); if (this.props.teamType === Constants.OPEN_TEAM && config.EnableUserCreation === 'true') { teamLink = (
  • ); } if (global.window.mm_license.IsLicensed === 'true') { if (config.RestrictTeamInvite === Constants.PERMISSIONS_SYSTEM_ADMIN && !isSystemAdmin) { teamLink = null; inviteLink = null; addMemberToTeam = null; } else if (config.RestrictTeamInvite === Constants.PERMISSIONS_TEAM_ADMIN && !isAdmin) { teamLink = null; inviteLink = null; addMemberToTeam = null; } } } let membersName = ( ); if (isAdmin) { teamSettings = (
  • ); } else { membersName = ( ); } manageLink = (
  • {membersName}
  • ); const integrationsEnabled = config.EnableIncomingWebhooks === 'true' || config.EnableOutgoingWebhooks === 'true' || config.EnableCommands === 'true' || (config.EnableOAuthServiceProvider === 'true' && (isSystemAdmin || config.EnableOnlyAdminIntegrations !== 'true')); if (integrationsEnabled && (isAdmin || config.EnableOnlyAdminIntegrations !== 'true')) { integrationsLink = (
  • ); } if (isSystemAdmin) { sysAdminLink = (
  • ); } const teams = []; let moreTeams = false; if (config.EnableTeamCreation === 'true' || UserStore.isSystemAdminForCurrentUser()) { teams.push(
  • ); } const isAlreadyMember = this.state.teamMembers.reduce((result, item) => { result[item.team_id] = true; return result; }, {}); for (const id in this.state.teamListings) { if (this.state.teamListings.hasOwnProperty(id) && !isAlreadyMember[id]) { moreTeams = true; break; } } if (moreTeams) { teams.push(
  • ); } teams.push(
  • ); let helpLink = null; if (config.HelpLink) { helpLink = (
  • ); } let reportLink = null; if (config.ReportAProblemLink) { reportLink = (
  • ); } let nativeAppLink = null; if (global.window.mm_config.AppDownloadLink && !UserAgent.isMobileApp()) { nativeAppLink = (
  • ); } let teamMembersModal; if (this.state.showTeamMembersModal) { teamMembersModal = ( ); } let addUsersToTeamModal; if (this.state.showAddUsersToTeamModal) { addUsersToTeamModal = ( ); } const accountSettings = (
  • ); const about = (
  • ); const logout = (
  • GlobalActions.emitUserLoggedOutEvent()} >
  • ); const customEmoji = this.renderCustomEmojiLink(); // Dividers. let inviteDivider = null; if (inviteLink || teamLink || addMemberToTeam) { inviteDivider =
  • ; } let teamDivider = null; if (teamSettings || manageLink || teams) { teamDivider =
  • ; } let backstageDivider = null; if (integrationsLink || customEmoji) { backstageDivider =
  • ; } let sysAdminDivider = null; if (sysAdminLink) { sysAdminDivider =
  • ; } let helpDivider = null; if (helpLink || reportLink || nativeAppLink || about) { helpDivider =
  • ; } let logoutDivider = null; if (logout) { logoutDivider =
  • ; } return ( {accountSettings} {inviteDivider} {inviteLink} {teamLink} {addMemberToTeam} {teamDivider} {teamSettings} {manageLink} {teams} {backstageDivider} {integrationsLink} {customEmoji} {sysAdminDivider} {sysAdminLink} {helpDivider} {helpLink} {reportLink} {nativeAppLink} {about} {logoutDivider} {logout} this.setState({showUserSettingsModal: false})} /> {teamMembersModal} {addUsersToTeamModal} ); } }