From ab67f6e257f6e8f08145a02a7b93550f99641be4 Mon Sep 17 00:00:00 2001
From: Joram Wilander <jwawilander@gmail.com>
Date: Sun, 18 Jun 2017 14:42:32 -0400
Subject: PLT-6215 Major post list refactor (#6501)

* Major post list refactor

* Fix post and thread deletion

* Fix preferences not selecting correctly

* Fix military time displaying

* Fix UP key for editing posts

* Fix ESLint error

* Various fixes and updates per feedback

* Fix for permalink view

* Revert to old scrolling method and various fixes

* Add floating timestamp, new message indicator, scroll arrows

* Update post loading for focus mode and add visibility limit

* Fix pinning posts and a react warning

* Add loading UI updates from Asaad

* Fix refreshing loop

* Temporarily bump post visibility limit

* Update infinite scrolling

* Remove infinite scrolling
---
 .../components/post_view/new_message_indicator.jsx | 69 ++++++++++++++++++++++
 1 file changed, 69 insertions(+)
 create mode 100644 webapp/components/post_view/new_message_indicator.jsx

(limited to 'webapp/components/post_view/new_message_indicator.jsx')

diff --git a/webapp/components/post_view/new_message_indicator.jsx b/webapp/components/post_view/new_message_indicator.jsx
new file mode 100644
index 000000000..d5fb6c1d3
--- /dev/null
+++ b/webapp/components/post_view/new_message_indicator.jsx
@@ -0,0 +1,69 @@
+// Copyright (c) 2016-present Mattermost, Inc. All Rights Reserved.
+// See License.txt for license information.
+
+import React from 'react';
+import PropTypes from 'prop-types';
+import {FormattedMessage} from 'react-intl';
+
+export default class NewMessageIndicator extends React.PureComponent {
+    static propTypes = {
+        onClick: PropTypes.func.isRequired,
+        newMessages: PropTypes.number
+    }
+
+    constructor(props) {
+        super(props);
+        this.state = {
+            visible: false,
+            rendered: false
+        };
+    }
+
+    componentWillReceiveProps(nextProps) {
+        if (nextProps.newMessages > 0) {
+            this.setState({rendered: true}, () => {
+                this.setState({visible: true});
+            });
+        } else {
+            this.setState({visible: false});
+        }
+    }
+
+    render() {
+        let className = 'new-messages__button';
+        if (this.state.visible > 0) {
+            className += ' visible';
+        }
+        if (!this.state.rendered) {
+            className += ' disabled';
+        }
+        return (
+            <div
+                className={className}
+                onTransitionEnd={this.setRendered.bind(this)}
+                ref='indicator'
+            >
+                <div onClick={this.props.onClick}>
+                    <i
+                        className='fa fa-angle-down'
+                    />
+                    <FormattedMessage
+                        id='posts_view.newMsgBelow'
+                        defaultMessage='New {count, plural, one {message} other {messages}} below'
+                        values={{count: this.props.newMessages}}
+                    />
+                </div>
+            </div>
+        );
+    }
+
+    // Sync 'rendered' state with visibility param, only after transitions
+    // have ended
+    setRendered() {
+        this.setState({rendered: this.state.visible});
+    }
+}
+
+NewMessageIndicator.defaultProps = {
+    newMessages: 0
+};
-- 
cgit v1.2.3-1-g7c22

