mastodon/app/assets/javascripts/components/features/compose/components/reply_indicator.jsx

66 lines
2.1 KiB
React
Raw Normal View History

import PureRenderMixin from 'react-addons-pure-render-mixin';
2016-08-31 22:58:10 +02:00
import ImmutablePropTypes from 'react-immutable-proptypes';
import Avatar from '../../../components/avatar';
import IconButton from '../../../components/icon_button';
import DisplayName from '../../../components/display_name';
import emojify from '../../../emoji';
2016-11-18 15:36:16 +01:00
import { defineMessages, injectIntl } from 'react-intl';
const messages = defineMessages({
cancel: { id: 'reply_indicator.cancel', defaultMessage: 'Cancel' }
});
2016-08-31 22:58:10 +02:00
const ReplyIndicator = React.createClass({
contextTypes: {
router: React.PropTypes.object
},
2016-08-31 22:58:10 +02:00
propTypes: {
2017-02-22 15:43:07 +01:00
status: ImmutablePropTypes.map,
onCancel: React.PropTypes.func.isRequired,
intl: React.PropTypes.object.isRequired
2016-08-31 22:58:10 +02:00
},
mixins: [PureRenderMixin],
handleClick () {
this.props.onCancel();
},
handleAccountClick (e) {
if (e.button === 0) {
e.preventDefault();
this.context.router.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);
}
},
2016-08-31 22:58:10 +02:00
render () {
2017-02-22 15:43:07 +01:00
const { status, intl } = this.props;
if (!status) {
return null;
}
const content = { __html: emojify(status.get('content')) };
2016-08-31 22:58:10 +02:00
return (
<div className='reply-indicator'>
2016-08-31 22:58:10 +02:00
<div style={{ overflow: 'hidden', marginBottom: '5px' }}>
2016-11-18 15:36:16 +01:00
<div style={{ float: 'right', lineHeight: '24px' }}><IconButton title={intl.formatMessage(messages.cancel)} icon='times' onClick={this.handleClick} /></div>
2016-08-31 22:58:10 +02:00
2017-02-22 15:43:07 +01:00
<a href={status.getIn(['account', 'url'])} onClick={this.handleAccountClick} className='reply-indicator__display-name' style={{ display: 'block', maxWidth: '100%', paddingRight: '25px', textDecoration: 'none', overflow: 'hidden', lineHeight: '24px' }}>
<div style={{ float: 'left', marginRight: '5px' }}><Avatar size={24} src={status.getIn(['account', 'avatar'])} staticSrc={status.getIn(['account', 'avatar_static'])} /></div>
2017-02-22 15:43:07 +01:00
<DisplayName account={status.get('account')} />
2016-08-31 22:58:10 +02:00
</a>
</div>
<div className='reply-indicator__content' dangerouslySetInnerHTML={content} />
</div>
);
}
});
export default injectIntl(ReplyIndicator);