* PLT-7119 - Updating headings on compact view * PLT-7103 - Removing line below channel intro * PLT-7112 - Fixing system console banner * PLT-7144 - Adding ellipsis to system console boxes * PLT-7181 - Changing channel header opacity * PLT-6899 - Updating unread bar * Updating margin for new messages indicator
73 строки
2.1 KiB
JavaScript
73 строки
2.1 KiB
JavaScript
// 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 Constants from 'utils/constants.jsx';
|
|
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() {
|
|
const unreadIcon = Constants.UNREAD_ICON_SVG;
|
|
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}>
|
|
<FormattedMessage
|
|
id='posts_view.newMsgBelow'
|
|
defaultMessage='New {count, plural, one {message} other {messages}}'
|
|
values={{count: this.props.newMessages}}
|
|
/>
|
|
<span
|
|
className='icon icon__unread'
|
|
dangerouslySetInnerHTML={{__html: unreadIcon}}
|
|
/>
|
|
</div>
|
|
</div>
|
|
);
|
|
}
|
|
|
|
// Sync 'rendered' state with visibility param, only after transitions
|
|
// have ended
|
|
setRendered() {
|
|
this.setState({rendered: this.state.visible});
|
|
}
|
|
}
|
|
|
|
NewMessageIndicator.defaultProps = {
|
|
newMessages: 0
|
|
};
|