diff options
Diffstat (limited to 'webapp/components')
-rw-r--r-- | webapp/components/popover_list_members.jsx | 92 |
1 files changed, 89 insertions, 3 deletions
diff --git a/webapp/components/popover_list_members.jsx b/webapp/components/popover_list_members.jsx index a0b36cdc3..5ffcb687a 100644 --- a/webapp/components/popover_list_members.jsx +++ b/webapp/components/popover_list_members.jsx @@ -5,6 +5,11 @@ import ProfilePicture from 'components/profile_picture.jsx'; import TeamStore from 'stores/team_store.jsx'; import UserStore from 'stores/user_store.jsx'; +import ChannelStore from 'stores/channel_store.jsx'; + +import TeamMembersModal from './team_members_modal.jsx'; +import ChannelMembersModal from './channel_members_modal.jsx'; +import ChannelInviteModal from './channel_invite_modal.jsx'; import {openDirectChannelToUser} from 'actions/channel_actions.jsx'; @@ -22,10 +27,17 @@ export default class PopoverListMembers extends React.Component { constructor(props) { super(props); + this.showMembersModal = this.showMembersModal.bind(this); + this.handleShowDirectChannel = this.handleShowDirectChannel.bind(this); this.closePopover = this.closePopover.bind(this); - this.state = {showPopover: false}; + this.state = { + showPopover: false, + showTeamMembersModal: false, + showChannelMembersModal: false, + showChannelInviteModal: false + }; } componentDidUpdate() { @@ -53,12 +65,31 @@ export default class PopoverListMembers extends React.Component { this.setState({showPopover: false}); } + showMembersModal(e) { + e.preventDefault(); + + if (ChannelStore.isDefault(this.props.channel)) { + this.setState({ + showPopover: false, + showTeamMembersModal: true + }); + } else { + this.setState({ + showPopover: false, + showChannelMembersModal: true + }); + } + } + render() { const popoverHtml = []; const members = this.props.members; const teamMembers = UserStore.getProfilesUsernameMap(); + let isAdmin = false; const currentUserId = UserStore.getCurrentId(); + isAdmin = TeamStore.isTeamAdminForCurrentTeam() || UserStore.isSystemAdminForCurrentUser(); + if (members && teamMembers) { members.sort((a, b) => { const aName = Utils.displayUsername(a.id); @@ -117,17 +148,37 @@ export default class PopoverListMembers extends React.Component { } }); + let membersName = ( + <FormattedMessage + id='members_popover.manageMembers' + defaultMessage='Manage Members' + /> + ); + if (!isAdmin && ChannelStore.isDefault(this.props.channel)) { + membersName = ( + <FormattedMessage + id='members_popover.viewMembers' + defaultMessage='View Members' + /> + ); + } + popoverHtml.push( <div className='more-modal__row' key={'popover-member-more'} > - <div className='col-sm-5'/> + <div className='col-sm-3'/> <div className='more-modal__details'> <div className='more-modal__name' > - {'...'} + <a + href='#' + onClick={this.showMembersModal} + > + {membersName} + </a> </div> </div> </div> @@ -146,6 +197,38 @@ export default class PopoverListMembers extends React.Component { defaultMessage='Members' /> ); + + let channelMembersModal; + if (this.state.showChannelMembersModal) { + channelMembersModal = ( + <ChannelMembersModal + onModalDismissed={() => this.setState({showChannelMembersModal: false})} + showInviteModal={() => this.setState({showChannelInviteModal: true})} + channel={this.props.channel} + /> + ); + } + + let teamMembersModal; + if (this.state.showTeamMembersModal) { + teamMembersModal = ( + <TeamMembersModal + onHide={() => this.setState({showTeamMembersModal: false})} + isAdmin={isAdmin} + /> + ); + } + + let channelInviteModal; + if (this.state.showChannelInviteModal) { + channelInviteModal = ( + <ChannelInviteModal + onHide={() => this.setState({showChannelInviteModal: false})} + channel={this.props.channel} + /> + ); + } + return ( <div> <div @@ -181,6 +264,9 @@ export default class PopoverListMembers extends React.Component { <div className='more-modal__list'>{popoverHtml}</div> </Popover> </Overlay> + {channelMembersModal} + {teamMembersModal} + {channelInviteModal} </div> ); } |