From fe217988724c5c74fc02c34180eab504a4d906c1 Mon Sep 17 00:00:00 2001
From: hmhealey <harrisonmhealey@gmail.com>
Date: Sat, 27 Feb 2016 11:04:24 -0500
Subject: Changed TeamMembersModal to use UserList

---
 web/react/components/team_members_dropdown.jsx | 331 +++++++++++++++++++++++++
 1 file changed, 331 insertions(+)
 create mode 100644 web/react/components/team_members_dropdown.jsx

(limited to 'web/react/components/team_members_dropdown.jsx')

diff --git a/web/react/components/team_members_dropdown.jsx b/web/react/components/team_members_dropdown.jsx
new file mode 100644
index 000000000..35ec66519
--- /dev/null
+++ b/web/react/components/team_members_dropdown.jsx
@@ -0,0 +1,331 @@
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import UserStore from '../stores/user_store.jsx';
+import ChannelStore from '../stores/channel_store.jsx';
+import * as Client from '../utils/client.jsx';
+import * as AsyncClient from '../utils/async_client.jsx';
+import * as Utils from '../utils/utils.jsx';
+import ConfirmModal from './confirm_modal.jsx';
+import TeamStore from '../stores/team_store.jsx';
+
+import {FormattedMessage} from 'mm-intl';
+
+export default class TeamMembersDropdown extends React.Component {
+    constructor(props) {
+        super(props);
+
+        this.handleMakeMember = this.handleMakeMember.bind(this);
+        this.handleMakeActive = this.handleMakeActive.bind(this);
+        this.handleMakeNotActive = this.handleMakeNotActive.bind(this);
+        this.handleMakeAdmin = this.handleMakeAdmin.bind(this);
+        this.handleDemote = this.handleDemote.bind(this);
+        this.handleDemoteSubmit = this.handleDemoteSubmit.bind(this);
+        this.handleDemoteCancel = this.handleDemoteCancel.bind(this);
+
+        this.state = {
+            serverError: null,
+            showDemoteModal: false,
+            user: null,
+            role: null
+        };
+    }
+    handleMakeMember() {
+        const me = UserStore.getCurrentUser();
+        if (this.props.user.id === me.id) {
+            this.handleDemote(this.props.user, '');
+        } else {
+            const data = {
+                user_id: this.props.user.id,
+                new_roles: ''
+            };
+            Client.updateRoles(data,
+                () => {
+                    AsyncClient.getProfiles();
+                },
+                (err) => {
+                    this.setState({serverError: err.message});
+                }
+            );
+        }
+    }
+    handleMakeActive() {
+        Client.updateActive(this.props.user.id, true,
+            () => {
+                AsyncClient.getProfiles();
+                AsyncClient.getChannelExtraInfo(ChannelStore.getCurrentId());
+            },
+            (err) => {
+                this.setState({serverError: err.message});
+            }
+        );
+    }
+    handleMakeNotActive() {
+        Client.updateActive(this.props.user.id, false,
+            () => {
+                AsyncClient.getProfiles();
+                AsyncClient.getChannelExtraInfo(ChannelStore.getCurrentId());
+            },
+            (err) => {
+                this.setState({serverError: err.message});
+            }
+        );
+    }
+    handleMakeAdmin() {
+        const me = UserStore.getCurrentUser();
+        if (this.props.user.id === me.id) {
+            this.handleDemote(this.props.user, 'admin');
+        } else {
+            const data = {
+                user_id: this.props.user.id,
+                new_roles: 'admin'
+            };
+
+            Client.updateRoles(data,
+                () => {
+                    AsyncClient.getProfiles();
+                },
+                (err) => {
+                    this.setState({serverError: err.message});
+                }
+            );
+        }
+    }
+    handleDemote(user, role) {
+        this.setState({
+            serverError: this.state.serverError,
+            showDemoteModal: true,
+            user,
+            role
+        });
+    }
+    handleDemoteCancel() {
+        this.setState({
+            serverError: null,
+            showDemoteModal: false,
+            user: null,
+            role: null
+        });
+    }
+    handleDemoteSubmit() {
+        const data = {
+            user_id: this.props.user.id,
+            new_roles: this.state.role
+        };
+
+        Client.updateRoles(data,
+            () => {
+                const teamUrl = TeamStore.getCurrentTeamUrl();
+                if (teamUrl) {
+                    window.location.href = teamUrl;
+                } else {
+                    window.location.href = '/';
+                }
+            },
+            (err) => {
+                this.setState({serverError: err.message});
+            }
+        );
+    }
+    render() {
+        let serverError = null;
+        if (this.state.serverError) {
+            serverError = (
+                <div className='has-error'>
+                    <label className='has-error control-label'>{this.state.serverError}</label>
+                </div>
+            );
+        }
+
+        const user = this.props.user;
+        let currentRoles = (
+            <FormattedMessage
+                id='member_team_item.member'
+                defaultMessage='Member'
+            />
+        );
+
+        if (user.roles.length > 0) {
+            if (Utils.isSystemAdmin(user.roles)) {
+                currentRoles = (
+                    <FormattedMessage
+                        id='member_team_item.systemAdmin'
+                        defaultMessage='System Admin'
+                    />
+                );
+            } else if (Utils.isAdmin(user.roles)) {
+                currentRoles = (
+                    <FormattedMessage
+                        id='member_team_item.teamAdmin'
+                        defaultMessage='Team Admin'
+                    />
+                );
+            } else {
+                currentRoles = user.roles.charAt(0).toUpperCase() + user.roles.slice(1);
+            }
+        }
+
+        let showMakeMember = user.roles === 'admin' || user.roles === 'system_admin';
+        let showMakeAdmin = user.roles === '' || user.roles === 'system_admin';
+        let showMakeActive = false;
+        let showMakeNotActive = user.roles !== 'system_admin';
+
+        if (user.delete_at > 0) {
+            currentRoles = (
+                <FormattedMessage
+                    id='member_team_item.inactive'
+                    defaultMessage='Inactive'
+                />
+            );
+            showMakeMember = false;
+            showMakeAdmin = false;
+            showMakeActive = true;
+            showMakeNotActive = false;
+        }
+
+        let makeAdmin = null;
+        if (showMakeAdmin) {
+            makeAdmin = (
+                <li role='presentation'>
+                    <a
+                        role='menuitem'
+                        href='#'
+                        onClick={this.handleMakeAdmin}
+                    >
+                        <FormattedMessage
+                            id='member_team_item.makeAdmin'
+                            defaultMessage='Make Team Admin'
+                        />
+                    </a>
+                </li>
+            );
+        }
+
+        let makeMember = null;
+        if (showMakeMember) {
+            makeMember = (
+                <li role='presentation'>
+                    <a
+                        role='menuitem'
+                        href='#'
+                        onClick={this.handleMakeMember}
+                    >
+                        <FormattedMessage
+                            id='member_team_item.makeMember'
+                            defaultMessage='Make Member'
+                        />
+                    </a>
+                </li>
+            );
+        }
+
+        let makeActive = null;
+        if (showMakeActive) {
+            makeActive = (
+                <li role='presentation'>
+                    <a
+                        role='menuitem'
+                        href='#'
+                        onClick={this.handleMakeActive}
+                    >
+                        <FormattedMessage
+                            id='member_team_item.makeActive'
+                            defaultMessage='Make Active'
+                        />
+                    </a>
+                </li>
+            );
+        }
+
+        let makeNotActive = null;
+        if (showMakeNotActive) {
+            makeNotActive = (
+                <li role='presentation'>
+                    <a
+                        role='menuitem'
+                        href='#'
+                        onClick={this.handleMakeNotActive}
+                    >
+                        <FormattedMessage
+                            id='member_team_item.makeInactive'
+                            defaultMessage='Make Inactive'
+                        />
+                    </a>
+                </li>
+            );
+        }
+        const me = UserStore.getCurrentUser();
+        let makeDemoteModal = null;
+        if (this.props.user.id === me.id) {
+            const title = (
+                <FormattedMessage
+                    id='member_team_item.confirmDemoteRoleTitle'
+                    defaultMessage='Confirm demotion from System Admin role'
+                />
+            );
+            const message = (
+                <div>
+                    <FormattedMessage
+                        id='member_team_item.confirmDemoteDescription'
+                        defaultMessage="If you demote yourself from the System Admin role and there is not another user with System Admin privileges, you'll need to re-assign a System Admin by accessing the Mattermost server through a terminal and running the following command."
+                    />
+                    <br/>
+                    <br/>
+                    <FormattedMessage
+                        id='member_team_item.confirmDemotionCmd'
+                        defaultMessage='platform -assign_role -team_name="yourteam" -email="name@yourcompany.com" -role="system_admin"'
+                    />
+                    {serverError}
+                </div>
+            );
+
+            const confirmButton = (
+                <FormattedMessage
+                    id='member_team_item.confirmDemotion'
+                    defaultMessage='Confirm Demotion'
+                />
+            );
+
+            makeDemoteModal = (
+                <ConfirmModal
+                    show={this.state.showDemoteModal}
+                    title={title}
+                    message={message}
+                    confirmButton={confirmButton}
+                    onConfirm={this.handleDemoteSubmit}
+                    onCancel={this.handleDemoteCancel}
+                />
+            );
+        }
+
+        return (
+            <div className='dropdown member-drop'>
+                <a
+                    href='#'
+                    className='dropdown-toggle theme'
+                    type='button'
+                    data-toggle='dropdown'
+                    aria-expanded='true'
+                >
+                    <span className='fa fa-pencil'></span>
+                    <span>{currentRoles} </span>
+                </a>
+                <ul
+                    className='dropdown-menu member-menu'
+                    role='menu'
+                >
+                    {makeAdmin}
+                    {makeMember}
+                    {makeActive}
+                    {makeNotActive}
+                </ul>
+                {makeDemoteModal}
+                {serverError}
+            </div>
+        );
+    }
+}
+
+TeamMembersDropdown.propTypes = {
+    user: React.PropTypes.object.isRequired
+};
-- 
cgit v1.2.3-1-g7c22


From a92b51935e172f4e4fc7af83f410a071d0590f90 Mon Sep 17 00:00:00 2001
From: hmhealey <harrisonmhealey@gmail.com>
Date: Wed, 2 Mar 2016 11:00:01 -0500
Subject: Moved localized strings for PLT-1090

---
 web/react/components/team_members_dropdown.jsx | 24 ++++++++++++------------
 1 file changed, 12 insertions(+), 12 deletions(-)

(limited to 'web/react/components/team_members_dropdown.jsx')

diff --git a/web/react/components/team_members_dropdown.jsx b/web/react/components/team_members_dropdown.jsx
index 35ec66519..7a298d26a 100644
--- a/web/react/components/team_members_dropdown.jsx
+++ b/web/react/components/team_members_dropdown.jsx
@@ -140,7 +140,7 @@ export default class TeamMembersDropdown extends React.Component {
         const user = this.props.user;
         let currentRoles = (
             <FormattedMessage
-                id='member_team_item.member'
+                id='team_members_dropdown.member'
                 defaultMessage='Member'
             />
         );
@@ -149,14 +149,14 @@ export default class TeamMembersDropdown extends React.Component {
             if (Utils.isSystemAdmin(user.roles)) {
                 currentRoles = (
                     <FormattedMessage
-                        id='member_team_item.systemAdmin'
+                        id='team_members_dropdown.systemAdmin'
                         defaultMessage='System Admin'
                     />
                 );
             } else if (Utils.isAdmin(user.roles)) {
                 currentRoles = (
                     <FormattedMessage
-                        id='member_team_item.teamAdmin'
+                        id='team_members_dropdown.teamAdmin'
                         defaultMessage='Team Admin'
                     />
                 );
@@ -173,7 +173,7 @@ export default class TeamMembersDropdown extends React.Component {
         if (user.delete_at > 0) {
             currentRoles = (
                 <FormattedMessage
-                    id='member_team_item.inactive'
+                    id='team_members_dropdown.inactive'
                     defaultMessage='Inactive'
                 />
             );
@@ -193,7 +193,7 @@ export default class TeamMembersDropdown extends React.Component {
                         onClick={this.handleMakeAdmin}
                     >
                         <FormattedMessage
-                            id='member_team_item.makeAdmin'
+                            id='team_members_dropdown.makeAdmin'
                             defaultMessage='Make Team Admin'
                         />
                     </a>
@@ -211,7 +211,7 @@ export default class TeamMembersDropdown extends React.Component {
                         onClick={this.handleMakeMember}
                     >
                         <FormattedMessage
-                            id='member_team_item.makeMember'
+                            id='team_members_dropdown.makeMember'
                             defaultMessage='Make Member'
                         />
                     </a>
@@ -229,7 +229,7 @@ export default class TeamMembersDropdown extends React.Component {
                         onClick={this.handleMakeActive}
                     >
                         <FormattedMessage
-                            id='member_team_item.makeActive'
+                            id='team_members_dropdown.makeActive'
                             defaultMessage='Make Active'
                         />
                     </a>
@@ -247,7 +247,7 @@ export default class TeamMembersDropdown extends React.Component {
                         onClick={this.handleMakeNotActive}
                     >
                         <FormattedMessage
-                            id='member_team_item.makeInactive'
+                            id='team_members_dropdown.makeInactive'
                             defaultMessage='Make Inactive'
                         />
                     </a>
@@ -259,20 +259,20 @@ export default class TeamMembersDropdown extends React.Component {
         if (this.props.user.id === me.id) {
             const title = (
                 <FormattedMessage
-                    id='member_team_item.confirmDemoteRoleTitle'
+                    id='team_members_dropdown.confirmDemoteRoleTitle'
                     defaultMessage='Confirm demotion from System Admin role'
                 />
             );
             const message = (
                 <div>
                     <FormattedMessage
-                        id='member_team_item.confirmDemoteDescription'
+                        id='team_members_dropdown.confirmDemoteDescription'
                         defaultMessage="If you demote yourself from the System Admin role and there is not another user with System Admin privileges, you'll need to re-assign a System Admin by accessing the Mattermost server through a terminal and running the following command."
                     />
                     <br/>
                     <br/>
                     <FormattedMessage
-                        id='member_team_item.confirmDemotionCmd'
+                        id='team_members_dropdown.confirmDemotionCmd'
                         defaultMessage='platform -assign_role -team_name="yourteam" -email="name@yourcompany.com" -role="system_admin"'
                     />
                     {serverError}
@@ -281,7 +281,7 @@ export default class TeamMembersDropdown extends React.Component {
 
             const confirmButton = (
                 <FormattedMessage
-                    id='member_team_item.confirmDemotion'
+                    id='team_members_dropdown.confirmDemotion'
                     defaultMessage='Confirm Demotion'
                 />
             );
-- 
cgit v1.2.3-1-g7c22


From 48eac58eaacba075f3b7ef518d0312b5f7ab3c17 Mon Sep 17 00:00:00 2001
From: hmhealey <harrisonmhealey@gmail.com>
Date: Wed, 2 Mar 2016 17:11:51 -0500
Subject: Fixed warnings and removed injectIntl from System Console user list

---
 web/react/components/team_members_dropdown.jsx | 1 +
 1 file changed, 1 insertion(+)

(limited to 'web/react/components/team_members_dropdown.jsx')

diff --git a/web/react/components/team_members_dropdown.jsx b/web/react/components/team_members_dropdown.jsx
index 7a298d26a..8aacba8ca 100644
--- a/web/react/components/team_members_dropdown.jsx
+++ b/web/react/components/team_members_dropdown.jsx
@@ -263,6 +263,7 @@ export default class TeamMembersDropdown extends React.Component {
                     defaultMessage='Confirm demotion from System Admin role'
                 />
             );
+
             const message = (
                 <div>
                     <FormattedMessage
-- 
cgit v1.2.3-1-g7c22

