From ab67f6e257f6e8f08145a02a7b93550f99641be4 Mon Sep 17 00:00:00 2001 From: Joram Wilander 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 ( +
+
+ + +
+
+ ); + } + + // 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