The code powering m.abunchtell.com https://m.abunchtell.com
Você não pode selecionar mais de 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 
 
 

65 linhas
2.6 KiB

  1. import PureRenderMixin from 'react-addons-pure-render-mixin';
  2. import IconButton from '../../../components/icon_button';
  3. import ImmutablePropTypes from 'react-immutable-proptypes';
  4. import DropdownMenu from '../../../components/dropdown_menu';
  5. import { injectIntl } from 'react-intl';
  6. const ActionBar = React.createClass({
  7. propTypes: {
  8. status: ImmutablePropTypes.map.isRequired,
  9. onReply: React.PropTypes.func.isRequired,
  10. onReblog: React.PropTypes.func.isRequired,
  11. onFavourite: React.PropTypes.func.isRequired,
  12. onDelete: React.PropTypes.func.isRequired,
  13. onMention: React.PropTypes.func.isRequired,
  14. me: React.PropTypes.number.isRequired
  15. },
  16. mixins: [PureRenderMixin],
  17. handleReplyClick () {
  18. this.props.onReply(this.props.status);
  19. },
  20. handleReblogClick () {
  21. this.props.onReblog(this.props.status);
  22. },
  23. handleFavouriteClick () {
  24. this.props.onFavourite(this.props.status);
  25. },
  26. handleDeleteClick () {
  27. this.props.onDelete(this.props.status);
  28. },
  29. handleMentionClick () {
  30. this.props.onMention(this.props.status.get('account'));
  31. },
  32. render () {
  33. const { status, me, intl } = this.props;
  34. let menu = [];
  35. if (me === status.getIn(['account', 'id'])) {
  36. menu.push({ text: intl.formatMessage({ id: 'status.delete', defaultMessage: 'Delete' }), action: this.handleDeleteClick });
  37. } else {
  38. menu.push({ text: intl.formatMessage({ id: 'status.mention', defaultMessage: 'Mention' }), action: this.handleMentionClick });
  39. }
  40. return (
  41. <div style={{ background: '#2f3441', display: 'flex', flexDirection: 'row', borderTop: '1px solid #363c4b', borderBottom: '1px solid #363c4b', padding: '10px 0' }}>
  42. <div style={{ flex: '1 1 auto', textAlign: 'center' }}><IconButton title={intl.formatMessage({ id: 'status.reply', defaultMessage: 'Reply' })} icon='reply' onClick={this.handleReplyClick} /></div>
  43. <div style={{ flex: '1 1 auto', textAlign: 'center' }}><IconButton active={status.get('reblogged')} title={intl.formatMessage({ id: 'status.reblog', defaultMessage: 'Reblog' })} icon='retweet' onClick={this.handleReblogClick} /></div>
  44. <div style={{ flex: '1 1 auto', textAlign: 'center' }}><IconButton active={status.get('favourited')} title={intl.formatMessage({ id: 'status.favourite', defaultMessage: 'Favourite' })} icon='star' onClick={this.handleFavouriteClick} activeStyle={{ color: '#ca8f04' }} /></div>
  45. <div style={{ flex: '1 1 auto', textAlign: 'center' }}><DropdownMenu size={18} icon='ellipsis-h' items={menu} /></div>
  46. </div>
  47. );
  48. }
  49. });
  50. export default injectIntl(ActionBar);