2017-05-03 00:04:16 +00:00
import React from 'react' ;
2017-04-11 02:28:52 +00:00
import ImmutablePropTypes from 'react-immutable-proptypes' ;
2017-04-21 18:05:35 +00:00
import PropTypes from 'prop-types' ;
2017-04-11 19:24:17 +00:00
import { defineMessages , injectIntl , FormattedMessage } from 'react-intl' ;
2017-04-11 02:28:52 +00:00
import IconButton from '../../../components/icon_button' ;
import Button from '../../../components/button' ;
2017-04-11 19:24:17 +00:00
import StatusContent from '../../../components/status_content' ;
import Avatar from '../../../components/avatar' ;
import RelativeTimestamp from '../../../components/relative_timestamp' ;
import DisplayName from '../../../components/display_name' ;
2017-05-03 00:04:16 +00:00
import ImmutablePureComponent from 'react-immutable-pure-component' ;
2017-04-11 02:28:52 +00:00
const messages = defineMessages ( {
reblog : { id : 'status.reblog' , defaultMessage : 'Boost' }
} ) ;
2017-05-03 00:04:16 +00:00
class BoostModal extends ImmutablePureComponent {
2017-04-11 02:28:52 +00:00
2017-04-21 18:05:35 +00:00
constructor ( props , context ) {
super ( props , context ) ;
this . handleReblog = this . handleReblog . bind ( this ) ;
this . handleAccountClick = this . handleAccountClick . bind ( this ) ;
}
2017-04-11 02:28:52 +00:00
handleReblog ( ) {
this . props . onReblog ( this . props . status ) ;
this . props . onClose ( ) ;
2017-04-21 18:05:35 +00:00
}
2017-04-11 02:28:52 +00:00
2017-04-11 19:24:17 +00:00
handleAccountClick ( e ) {
if ( e . button === 0 ) {
e . preventDefault ( ) ;
this . props . onClose ( ) ;
this . context . router . push ( ` /accounts/ ${ this . props . status . getIn ( [ 'account' , 'id' ] ) } ` ) ;
}
2017-04-21 18:05:35 +00:00
}
2017-04-11 02:28:52 +00:00
render ( ) {
const { status , intl , onClose } = this . props ;
return (
< div className = 'modal-root__modal boost-modal' >
2017-04-11 19:24:17 +00:00
< div className = 'boost-modal__container' >
< div className = 'status light' >
2017-04-23 02:26:55 +00:00
< div className = 'boost-modal__status-header' >
< div className = 'boost-modal__status-time' >
2017-04-11 19:24:17 +00:00
< a href = { status . get ( 'url' ) } className = 'status__relative-time' target = '_blank' rel = 'noopener' > < RelativeTimestamp timestamp = { status . get ( 'created_at' ) } / > < / a >
< / d i v >
2017-04-23 02:26:55 +00:00
< a onClick = { this . handleAccountClick } href = { status . getIn ( [ 'account' , 'url' ] ) } className = 'status__display-name' >
< div className = 'status__avatar' >
2017-04-11 19:24:17 +00:00
< Avatar src = { status . getIn ( [ 'account' , 'avatar' ] ) } staticSrc = { status . getIn ( [ 'account' , 'avatar_static' ] ) } size = { 48 } / >
< / d i v >
< DisplayName account = { status . get ( 'account' ) } / >
< / a >
< / d i v >
< StatusContent status = { status } / >
< / d i v >
2017-04-11 02:28:52 +00:00
< / d i v >
2017-04-11 19:24:17 +00:00
< div className = 'boost-modal__action-bar' >
2017-04-13 00:15:45 +00:00
< div > < FormattedMessage id = 'boost_modal.combo' defaultMessage = 'You can press {combo} to skip this next time' values = { { combo : < span > Shift + < i className = 'fa fa-retweet' / > < /span> }} / > < / d i v >
2017-04-11 19:24:17 +00:00
< Button text = { intl . formatMessage ( messages . reblog ) } onClick = { this . handleReblog } / >
2017-04-11 02:28:52 +00:00
< / d i v >
< / d i v >
) ;
}
2017-04-21 18:05:35 +00:00
}
BoostModal . contextTypes = {
router : PropTypes . object
} ;
BoostModal . propTypes = {
status : ImmutablePropTypes . map . isRequired ,
onReblog : PropTypes . func . isRequired ,
onClose : PropTypes . func . isRequired ,
intl : PropTypes . object . isRequired
} ;
2017-04-11 02:28:52 +00:00
export default injectIntl ( BoostModal ) ;