From dc2f2a800105b77e665ec2a00c6290f35b1a2ba3 Mon Sep 17 00:00:00 2001
From: Harrison Healey <harrisonmhealey@gmail.com>
Date: Tue, 5 Jul 2016 11:58:18 -0400
Subject: PLT-3145 Custom Emojis (#3381)

* Reorganized Backstage code to use a view controller and separated it from integrations code

* Renamed InstalledIntegrations component to BackstageList

* Added EmojiList page

* Added AddEmoji page

* Added custom emoji to autocomplete and text formatter

* Moved system emoji to EmojiStore

* Stopped trying to get emoji before logging in

* Rerender posts when emojis change

* Fixed submit handler on backstage pages to properly support enter

* Removed debugging code

* Updated javascript driver

* Fixed unit tests

* Fixed backstage routes

* Added clientside validation to prevent users from creating an emoji with the same name as a system one

* Fixed AddEmoji page to properly redirect when an emoji is created successfully

* Fixed updating emoji list when an emoji is deleted

* Added type prop to BackstageList to properly support using a table for the list

* Added help text to EmojiList

* Fixed backstage on smaller screen sizes

* Disable custom emoji by default

* Improved restrictions on creating emojis

* Fixed non-admin users seeing the option to delete each other's emojis

* Fixing gofmt

* Fixed emoji unit tests

* Fixed trying to get emoji from the server when it's disabled
---
 .../components/backstage/backstage_controller.jsx  | 71 ++++++++++++++++++++++
 1 file changed, 71 insertions(+)
 create mode 100644 webapp/components/backstage/backstage_controller.jsx

(limited to 'webapp/components/backstage/backstage_controller.jsx')

diff --git a/webapp/components/backstage/backstage_controller.jsx b/webapp/components/backstage/backstage_controller.jsx
new file mode 100644
index 000000000..690880071
--- /dev/null
+++ b/webapp/components/backstage/backstage_controller.jsx
@@ -0,0 +1,71 @@
+// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import React from 'react';
+
+import TeamStore from 'stores/team_store.jsx';
+
+import BackstageSidebar from './components/backstage_sidebar.jsx';
+import BackstageNavbar from './components/backstage_navbar.jsx';
+import ErrorBar from 'components/error_bar.jsx';
+
+export default class BackstageController extends React.Component {
+    static get propTypes() {
+        return {
+            children: React.PropTypes.node.isRequired,
+            params: React.PropTypes.object.isRequired,
+            user: React.PropTypes.user.isRequired
+        };
+    }
+
+    constructor(props) {
+        super(props);
+
+        this.onTeamChange = this.onTeamChange.bind(this);
+
+        this.state = {
+            team: props.params.team ? TeamStore.getByName(props.params.team) : TeamStore.getCurrent()
+        };
+    }
+
+    componentDidMount() {
+        TeamStore.addChangeListener(this.onTeamChange);
+    }
+
+    componentWillUnmount() {
+        TeamStore.removeChangeListener(this.onTeamChange);
+    }
+
+    onTeamChange() {
+        this.state = {
+            team: this.props.params.team ? TeamStore.getByName(this.props.params.team) : TeamStore.getCurrent()
+        };
+    }
+
+    render() {
+        return (
+            <div className='backstage'>
+                <ErrorBar/>
+                <BackstageNavbar team={this.state.team}/>
+                <div className='backstage-body'>
+                    <BackstageSidebar
+                        team={this.state.team}
+                        user={this.props.user}
+                    />
+                    {
+                        React.Children.map(this.props.children, (child) => {
+                            if (!child) {
+                                return child;
+                            }
+
+                            return React.cloneElement(child, {
+                                team: this.state.team,
+                                user: this.props.user
+                            });
+                        })
+                    }
+                </div>
+            </div>
+        );
+    }
+}
\ No newline at end of file
-- 
cgit v1.2.3-1-g7c22

