Skip to content
Extraits de code Groupes Projets
boost_modal.js 2,76 ko
Newer Older
  • Learn to ignore specific revisions
  • import React from 'react';
    
    blackle's avatar
    blackle a validé
    import ImmutablePropTypes from 'react-immutable-proptypes';
    
    import PropTypes from 'prop-types';
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
    import { defineMessages, injectIntl, FormattedMessage } from 'react-intl';
    
    blackle's avatar
    blackle a validé
    import Button from '../../../components/button';
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
    import StatusContent from '../../../components/status_content';
    import Avatar from '../../../components/avatar';
    import RelativeTimestamp from '../../../components/relative_timestamp';
    import DisplayName from '../../../components/display_name';
    
    import ImmutablePureComponent from 'react-immutable-pure-component';
    
    blackle's avatar
    blackle a validé
    
    const messages = defineMessages({
    
      reblog: { id: 'status.reblog', defaultMessage: 'Boost' },
    
    blackle's avatar
    blackle a validé
    });
    
    
    export default @injectIntl
    class BoostModal extends ImmutablePureComponent {
    
    blackle's avatar
    blackle a validé
    
    
      static contextTypes = {
    
        router: PropTypes.object,
    
      };
    
      static propTypes = {
        status: ImmutablePropTypes.map.isRequired,
        onReblog: PropTypes.func.isRequired,
        onClose: PropTypes.func.isRequired,
    
        intl: PropTypes.object.isRequired,
    
      componentDidMount() {
        this.button.focus();
      }
    
    
      handleReblog = () => {
    
    blackle's avatar
    blackle a validé
        this.props.onReblog(this.props.status);
        this.props.onClose();
    
    blackle's avatar
    blackle a validé
    
    
      handleAccountClick = (e) => {
    
        if (e.button === 0 && !(e.ctrlKey || e.metaKey)) {
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
          e.preventDefault();
          this.props.onClose();
    
          this.context.router.history.push(`/accounts/${this.props.status.getIn(['account', 'id'])}`);
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
        }
    
    blackle's avatar
    blackle a validé
    
    
      setRef = (c) => {
        this.button = c;
      }
    
    
    blackle's avatar
    blackle a validé
      render () {
    
        const { status, intl } = this.props;
    
    blackle's avatar
    blackle a validé
    
        return (
          <div className='modal-root__modal boost-modal'>
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
            <div className='boost-modal__container'>
              <div className='status light'>
    
                <div className='boost-modal__status-header'>
                  <div className='boost-modal__status-time'>
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
                    <a href={status.get('url')} className='status__relative-time' target='_blank' rel='noopener'><RelativeTimestamp timestamp={status.get('created_at')} /></a>
                  </div>
    
    
                  <a onClick={this.handleAccountClick} href={status.getIn(['account', 'url'])} className='status__display-name'>
                    <div className='status__avatar'>
    
                      <Avatar account={status.get('account')} size={48} />
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
                    </div>
    
                    <DisplayName account={status.get('account')} />
                  </a>
                </div>
    
                <StatusContent status={status} />
              </div>
    
    blackle's avatar
    blackle a validé
            </div>
    
    Eugen Rochko's avatar
    Eugen Rochko a validé
    
            <div className='boost-modal__action-bar'>
    
              <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> }} /></div>
    
              <Button text={intl.formatMessage(messages.reblog)} onClick={this.handleReblog} ref={this.setRef} />
    
    blackle's avatar
    blackle a validé
            </div>
          </div>
        );
      }