From 12896bd23eeba79884245c1c29fdc568cf21a7fa Mon Sep 17 00:00:00 2001
From: Christopher Speller <crspeller@gmail.com>
Date: Mon, 14 Mar 2016 08:50:46 -0400
Subject: Converting to Webpack. Stage 1.

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

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

diff --git a/webapp/components/post_focus_view.jsx b/webapp/components/post_focus_view.jsx
new file mode 100644
index 000000000..7ff20c78d
--- /dev/null
+++ b/webapp/components/post_focus_view.jsx
@@ -0,0 +1,135 @@
+// Copyright (c) 2015 Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import PostsView from './posts_view.jsx';
+
+import PostStore from 'stores/post_store.jsx';
+import ChannelStore from 'stores/channel_store.jsx';
+import UserStore from 'stores/user_store.jsx';
+import * as GlobalActions from 'action_creators/global_actions.jsx';
+
+import {FormattedMessage} from 'react-intl';
+
+import React from 'react';
+
+export default class PostFocusView extends React.Component {
+    constructor(props) {
+        super(props);
+
+        this.onChannelChange = this.onChannelChange.bind(this);
+        this.onPostsChange = this.onPostsChange.bind(this);
+        this.onUserChange = this.onUserChange.bind(this);
+        this.handlePostsViewScroll = this.handlePostsViewScroll.bind(this);
+        this.loadMorePostsTop = this.loadMorePostsTop.bind(this);
+        this.loadMorePostsBottom = this.loadMorePostsBottom.bind(this);
+
+        const focusedPostId = PostStore.getFocusedPostId();
+
+        this.state = {
+            scrollType: PostsView.SCROLL_TYPE_POST,
+            scrollPostId: focusedPostId,
+            postList: PostStore.getVisiblePosts(focusedPostId),
+            atTop: PostStore.getVisibilityAtTop(focusedPostId),
+            atBottom: PostStore.getVisibilityAtBottom(focusedPostId),
+            currentUser: UserStore.getCurrentUser()
+        };
+    }
+
+    componentDidMount() {
+        ChannelStore.addChangeListener(this.onChannelChange);
+        PostStore.addChangeListener(this.onPostsChange);
+        UserStore.addChangeListener(this.onUserChange);
+    }
+
+    componentWillUnmount() {
+        ChannelStore.removeChangeListener(this.onChannelChange);
+        PostStore.removeChangeListener(this.onPostsChange);
+        UserStore.removeChangeListener(this.onUserChange);
+    }
+
+    onChannelChange() {
+        this.setState({
+            scrollType: PostsView.SCROLL_TYPE_POST
+        });
+    }
+
+    onUserChange() {
+        this.setState({currentUser: UserStore.getCurrentUser()});
+    }
+
+    onPostsChange() {
+        const focusedPostId = PostStore.getFocusedPostId();
+        if (focusedPostId == null) {
+            return;
+        }
+
+        this.setState({
+            scrollPostId: focusedPostId,
+            postList: PostStore.getVisiblePosts(focusedPostId),
+            atTop: PostStore.getVisibilityAtTop(focusedPostId),
+            atBottom: PostStore.getVisibilityAtBottom(focusedPostId)
+        });
+    }
+
+    handlePostsViewScroll() {
+        this.setState({scrollType: PostsView.SCROLL_TYPE_FREE});
+    }
+
+    loadMorePostsTop() {
+        GlobalActions.emitLoadMorePostsFocusedTopEvent();
+    }
+
+    loadMorePostsBottom() {
+        GlobalActions.emitLoadMorePostsFocusedBottomEvent();
+    }
+
+    getIntroMessage() {
+        return (
+            <div className='channel-intro'>
+                <h4 className='channel-intro__title'>
+                    <FormattedMessage
+                        id='post_focus_view.beginning'
+                        defaultMessage='Beginning of Channel Archives'
+                    />
+                </h4>
+            </div>
+        );
+    }
+
+    render() {
+        const postsToHighlight = {};
+        postsToHighlight[this.state.scrollPostId] = true;
+
+        if (!this.state.currentUser || !this.state.postList) {
+            return null;
+        }
+
+        return (
+            <div id='post-list'>
+                <PostsView
+                    key={'postfocusview'}
+                    isActive={true}
+                    postList={this.state.postList}
+                    scrollType={this.state.scrollType}
+                    scrollPostId={this.state.scrollPostId}
+                    postViewScrolled={this.handlePostsViewScroll}
+                    loadMorePostsTopClicked={this.loadMorePostsTop}
+                    loadMorePostsBottomClicked={this.loadMorePostsBottom}
+                    showMoreMessagesTop={!this.state.atTop}
+                    showMoreMessagesBottom={!this.state.atBottom}
+                    introText={this.getIntroMessage()}
+                    messageSeparatorTime={0}
+                    postsToHighlight={postsToHighlight}
+                    profiles={this.props.profiles}
+                    currentUser={this.state.currentUser}
+                />
+            </div>
+        );
+    }
+}
+PostFocusView.defaultProps = {
+};
+
+PostFocusView.propTypes = {
+    profiles: React.PropTypes.object
+};
-- 
cgit v1.2.3-1-g7c22

