You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

71 lines
2.4 KiB

  1. import classNames from 'classnames';
  2. import React from 'react';
  3. import ImmutablePureComponent from 'react-immutable-pure-component';
  4. import PropTypes from 'prop-types';
  5. import ImmutablePropTypes from 'react-immutable-proptypes';
  6. import { FormattedMessage, defineMessages } from 'react-intl';
  7. import Hashtag from '../../../components/hashtag';
  8. import { Link } from 'react-router-dom';
  9. const messages = defineMessages({
  10. refresh_trends: { id: 'trends.refresh', defaultMessage: 'Refresh' },
  11. });
  12. export default class Trends extends ImmutablePureComponent {
  13. static defaultProps = {
  14. loading: false,
  15. };
  16. static propTypes = {
  17. trends: ImmutablePropTypes.list,
  18. loading: PropTypes.bool.isRequired,
  19. showTrends: PropTypes.bool.isRequired,
  20. fetchTrends: PropTypes.func.isRequired,
  21. toggleTrends: PropTypes.func.isRequired,
  22. };
  23. componentDidMount () {
  24. setTimeout(() => this.props.fetchTrends(), 5000);
  25. }
  26. handleRefreshTrends = () => {
  27. this.props.fetchTrends();
  28. }
  29. handleToggle = () => {
  30. this.props.toggleTrends(!this.props.showTrends);
  31. }
  32. render () {
  33. const { intl, trends, loading, showTrends } = this.props;
  34. if (!trends || trends.size < 1) {
  35. return null;
  36. }
  37. return (
  38. <div className='getting-started__trends'>
  39. <div className='column-header__wrapper'>
  40. <h1 className='column-header'>
  41. <button>
  42. <i className='fa fa-fire fa-fw' />
  43. <FormattedMessage id='trends.header' defaultMessage='Trending now' />
  44. </button>
  45. <div className='column-header__buttons'>
  46. {showTrends && <button onClick={this.handleRefreshTrends} className='column-header__button' title={intl.formatMessage(messages.refresh_trends)} aria-label={intl.formatMessage(messages.refresh_trends)} disabled={loading}><i className={classNames('fa', 'fa-refresh', { 'fa-spin': loading })} /></button>}
  47. <button onClick={this.handleToggle} className='column-header__button'><i className={classNames('fa', showTrends ? 'fa-chevron-down' : 'fa-chevron-up')} /></button>
  48. </div>
  49. </h1>
  50. </div>
  51. {showTrends && <div className='getting-started__scrollable'>
  52. {trends.take(3).map(hashtag => <Hashtag key={hashtag.get('name')} hashtag={hashtag} />)}
  53. <Link to='/trends' className='load-more'><FormattedMessage id='status.load_more' defaultMessage='Load more' /></Link>
  54. </div>}
  55. </div>
  56. );
  57. }
  58. }