From 5ce1a4368bafbd2ed50b1953658fca285cfd349b Mon Sep 17 00:00:00 2001
From: Christopher Speller <crspeller@gmail.com>
Date: Thu, 24 Mar 2016 20:04:40 -0400
Subject: Refactoring center panel away. Moving tutorial to a route. Fixing a
 bunch of bugs.

---
 webapp/components/permalink_view.jsx | 109 +++++++++++++++++++++++++++++++++++
 1 file changed, 109 insertions(+)
 create mode 100644 webapp/components/permalink_view.jsx

(limited to 'webapp/components/permalink_view.jsx')

diff --git a/webapp/components/permalink_view.jsx b/webapp/components/permalink_view.jsx
new file mode 100644
index 000000000..8e49019ee
--- /dev/null
+++ b/webapp/components/permalink_view.jsx
@@ -0,0 +1,109 @@
+// Copyright (c) 2016 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import React from 'react';
+
+import ChannelHeader from 'components/channel_header.jsx';
+import PostFocusView from 'components/post_focus_view.jsx';
+
+import ChannelStore from 'stores/channel_store.jsx';
+import UserStore from 'stores/user_store.jsx';
+import TeamStore from 'stores/team_store.jsx';
+
+import {Link} from 'react-router';
+import {FormattedMessage} from 'react-intl';
+
+export default class PermalinkView extends React.Component {
+    constructor(props) {
+        super(props);
+
+        this.getStateFromStores = this.getStateFromStores.bind(this);
+        this.isStateValid = this.isStateValid.bind(this);
+        this.updateState = this.updateState.bind(this);
+
+        this.state = this.getStateFromStores(props);
+    }
+    getStateFromStores(props) {
+        const postId = props.params.postid;
+        const channel = ChannelStore.getCurrent();
+        const channelId = channel ? channel.id : '';
+        const channelName = channel ? channel.name : '';
+        const teamURL = TeamStore.getCurrentTeamUrl();
+        const profiles = JSON.parse(JSON.stringify(UserStore.getProfiles()));
+        return {
+            channelId,
+            channelName,
+            profiles,
+            teamURL,
+            postId
+        };
+    }
+    isStateValid() {
+        return this.state.channelId !== '' && this.state.profiles && this.state.teamURL;
+    }
+    updateState() {
+        this.setState(this.getStateFromStores(this.props));
+    }
+    componentDidMount() {
+        ChannelStore.addChangeListener(this.updateState);
+        TeamStore.addChangeListener(this.updateState);
+    }
+    componentWillUnmount() {
+        ChannelStore.removeChangeListener(this.updateState);
+        TeamStore.removeChangeListener(this.updateState);
+    }
+    componentWillReceiveProps(nextProps) {
+        this.setState(this.getStateFromStores(nextProps));
+    }
+    shouldComponentUpdate(nextProps, nextState) {
+        if (nextState.postId !== this.state.postId) {
+            return true;
+        }
+
+        if (nextState.channelId !== this.state.channelId) {
+            return true;
+        }
+
+        if (nextState.teamURL !== this.state.teamURL) {
+            return true;
+        }
+
+        return false;
+    }
+    render() {
+        if (!this.isStateValid()) {
+            return null;
+        }
+        return (
+            <div
+                id='app-content'
+                className='app__content'
+            >
+                <ChannelHeader
+                    channelId={this.state.channelId}
+                />
+                <PostFocusView profiles={this.state.profiles}/>
+                <div
+                    id='archive-link-home'
+                >
+                    <Link
+                        to={this.state.teamURL + '/channels/' + this.state.channelName}
+                    >
+                        <FormattedMessage
+                            id='center_panel.recent'
+                            defaultMessage='Click here to jump to recent messages. '
+                        />
+                        <i className='fa fa-arrow-down'></i>
+                    </Link>
+                </div>
+            </div>
+        );
+    }
+}
+
+PermalinkView.defaultProps = {
+};
+
+PermalinkView.propTypes = {
+    params: React.PropTypes.object.isRequired
+};
-- 
cgit v1.2.3-1-g7c22

