PLT-6023: Add Users to Team in WebApp. (#5956)

* PLT-6198: Use added to channel system message on default channels.

Use a different sytem message when a user was added to a default channel
by someone else than when they joined themselves.

* PLT-6023: Add Users to Team in WebApp.

* Fix string text.

* Handle added_to_team websocket message.

* Fix unread flag on new channel.
Этот коммит содержится в:
George Goldberg
2017-04-04 20:17:15 +01:00
коммит произвёл Christopher Speller
родитель 77a76487a8
Коммит 1fa3f2351c
12 изменённых файлов: 770 добавлений и 81 удалений

Просмотреть файл

@@ -14,6 +14,7 @@ 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';
@@ -43,6 +44,8 @@ export default class SidebarHeaderDropdown extends React.Component {
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);
@@ -61,7 +64,8 @@ export default class SidebarHeaderDropdown extends React.Component {
showAboutModal: false,
showDropdown: false,
showTeamMembersModal: false,
showUserSettingsModal: false
showUserSettingsModal: false,
showAddUsersToTeamModal: false
};
}
@@ -102,6 +106,21 @@ export default class SidebarHeaderDropdown extends React.Component {
});
}
showAddUsersToTeamModal(e) {
e.preventDefault();
this.setState({
showAddUsersToTeamModal: true,
showDropdown: false
});
}
hideAddUsersToTeamModal() {
this.setState({
showAddUsersToTeamModal: false
});
}
showInviteMemberModal(e) {
e.preventDefault();
@@ -181,6 +200,7 @@ export default class SidebarHeaderDropdown extends React.Component {
const currentUser = this.props.currentUser;
let teamLink = '';
let inviteLink = '';
let addMemberToTeam = '';
let manageLink = '';
let sysAdminLink = '';
let isAdmin = false;
@@ -204,7 +224,22 @@ export default class SidebarHeaderDropdown extends React.Component {
>
<FormattedMessage
id='navbar_dropdown.inviteMember'
defaultMessage='Invite New Member'
defaultMessage='Send Email Invite'
/>
</a>
</li>
);
addMemberToTeam = (
<li>
<a
id='addUsersToTeam'
href='#'
onClick={this.showAddUsersToTeamModal}
>
<FormattedMessage
id='navbar_dropdown.addMemberToTeam'
defaultMessage='Add Members to Team'
/>
</a>
</li>
@@ -230,9 +265,11 @@ export default class SidebarHeaderDropdown extends React.Component {
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;
}
}
}
@@ -416,10 +453,8 @@ export default class SidebarHeaderDropdown extends React.Component {
);
}
let nativeAppDivider = null;
let nativeAppLink = null;
if (global.window.mm_config.AppDownloadLink && !UserAgent.isMobileApp()) {
nativeAppDivider = <li className='divider'/>;
nativeAppLink = (
<li>
<Link
@@ -447,6 +482,92 @@ export default class SidebarHeaderDropdown extends React.Component {
);
}
let addUsersToTeamModal;
if (this.state.showAddUsersToTeamModal) {
addUsersToTeamModal = (
<AddUsersToTeam
onModalDismissed={this.hideAddUsersToTeamModal}
/>
);
}
const accountSettings = (
<li>
<a
id='accountSettings'
href='#'
onClick={this.toggleAccountSettingsModal}
>
<FormattedMessage
id='navbar_dropdown.accountSettings'
defaultMessage='Account Settings'
/>
</a>
</li>
);
const about = (
<li>
<a
href='#'
onClick={this.handleAboutModal}
>
<FormattedMessage
id='navbar_dropdown.about'
defaultMessage='About Mattermost'
/>
</a>
</li>
);
const logout = (
<li>
<a
id='logout'
href='#'
onClick={() => GlobalActions.emitUserLoggedOutEvent()}
>
<FormattedMessage
id='navbar_dropdown.logout'
defaultMessage='Logout'
/>
</a>
</li>
);
const customEmoji = this.renderCustomEmojiLink();
// Dividers.
let inviteDivider = null;
if (inviteLink || teamLink || addMemberToTeam) {
inviteDivider = <li className='divider'/>;
}
let teamDivider = null;
if (teamSettings || manageLink || teams) {
teamDivider = <li className='divider'/>;
}
let backstageDivider = null;
if (integrationsLink || customEmoji) {
backstageDivider = <li className='divider'/>;
}
let sysAdminDivider = null;
if (sysAdminLink) {
sysAdminDivider = <li className='divider'/>;
}
let helpDivider = null;
if (helpLink || reportLink || nativeAppLink || about) {
helpDivider = <li className='divider'/>;
}
let logoutDivider = null;
if (logout) {
logoutDivider = <li className='divider'/>;
}
return (
<Dropdown
id='sidebar-header-dropdown'
@@ -460,56 +581,27 @@ export default class SidebarHeaderDropdown extends React.Component {
onClick={this.toggleDropdown}
/>
<Dropdown.Menu>
<li>
<a
id='accountSettings'
href='#'
onClick={this.toggleAccountSettingsModal}
>
<FormattedMessage
id='navbar_dropdown.accountSettings'
defaultMessage='Account Settings'
/>
</a>
</li>
{accountSettings}
{inviteDivider}
{inviteLink}
{teamLink}
<li>
<a
id='logout'
href='#'
onClick={() => GlobalActions.emitUserLoggedOutEvent()}
>
<FormattedMessage
id='navbar_dropdown.logout'
defaultMessage='Logout'
/>
</a>
</li>
<li className='divider'/>
{integrationsLink}
{this.renderCustomEmojiLink()}
<li className='divider'/>
{addMemberToTeam}
{teamDivider}
{teamSettings}
{manageLink}
{sysAdminLink}
{teams}
<li className='divider'/>
{backstageDivider}
{integrationsLink}
{customEmoji}
{sysAdminDivider}
{sysAdminLink}
{helpDivider}
{helpLink}
{reportLink}
<li>
<a
href='#'
onClick={this.handleAboutModal}
>
<FormattedMessage
id='navbar_dropdown.about'
defaultMessage='About Mattermost'
/>
</a>
</li>
{nativeAppDivider}
{nativeAppLink}
{about}
{logoutDivider}
{logout}
<UserSettingsModal
show={this.state.showUserSettingsModal}
onModalDismissed={() => this.setState({showUserSettingsModal: false})}
@@ -519,6 +611,7 @@ export default class SidebarHeaderDropdown extends React.Component {
show={this.state.showAboutModal}
onModalDismissed={this.aboutModalDismissed}
/>
{addUsersToTeamModal}
</Dropdown.Menu>
</Dropdown>
);