Add boost confirm modal
This commit is contained in:
		
							parent
							
								
									3047a8da74
								
							
						
					
					
						commit
						3f5290bdb2
					
				
					 6 changed files with 109 additions and 6 deletions
				
			
		| 
						 | 
					@ -38,11 +38,15 @@ const mapDispatchToProps = (dispatch) => ({
 | 
				
			||||||
    dispatch(replyCompose(status, router));
 | 
					    dispatch(replyCompose(status, router));
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  onModalReblog (status) {
 | 
				
			||||||
 | 
					    dispatch(reblog(status));
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onReblog (status) {
 | 
					  onReblog (status) {
 | 
				
			||||||
    if (status.get('reblogged')) {
 | 
					    if (status.get('reblogged')) {
 | 
				
			||||||
      dispatch(unreblog(status));
 | 
					      dispatch(unreblog(status));
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      dispatch(reblog(status));
 | 
					      dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -82,11 +82,15 @@ const Status = React.createClass({
 | 
				
			||||||
    this.props.dispatch(replyCompose(status, this.context.router));
 | 
					    this.props.dispatch(replyCompose(status, this.context.router));
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  handleModalReblog (status) {
 | 
				
			||||||
 | 
					    this.props.dispatch(reblog(status));
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleReblogClick (status) {
 | 
					  handleReblogClick (status) {
 | 
				
			||||||
    if (status.get('reblogged')) {
 | 
					    if (status.get('reblogged')) {
 | 
				
			||||||
      this.props.dispatch(unreblog(status));
 | 
					      this.props.dispatch(unreblog(status));
 | 
				
			||||||
    } else {
 | 
					    } else {
 | 
				
			||||||
      this.props.dispatch(reblog(status));
 | 
					      this.props.dispatch(openModal('BOOST', { status, onReblog: this.handleModalReblog }));
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -0,0 +1,64 @@
 | 
				
			||||||
 | 
					import PureRenderMixin from 'react-addons-pure-render-mixin';
 | 
				
			||||||
 | 
					import ImmutablePropTypes from 'react-immutable-proptypes';
 | 
				
			||||||
 | 
					import { defineMessages, injectIntl } from 'react-intl';
 | 
				
			||||||
 | 
					import IconButton from '../../../components/icon_button';
 | 
				
			||||||
 | 
					import Button from '../../../components/button';
 | 
				
			||||||
 | 
					import DetailedStatus from '../../status/components/detailed_status';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const messages = defineMessages({
 | 
				
			||||||
 | 
					  close: { id: 'lightbox.close', defaultMessage: 'Close' },
 | 
				
			||||||
 | 
					  reblog: { id: 'status.reblog', defaultMessage: 'Boost' }
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const closeStyle = {
 | 
				
			||||||
 | 
					  position: 'absolute',
 | 
				
			||||||
 | 
					  top: '4px',
 | 
				
			||||||
 | 
					  right: '4px'
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const buttonContainerStyle = {
 | 
				
			||||||
 | 
					  textAlign: 'right',
 | 
				
			||||||
 | 
					  padding: '10px'
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const BoostModal = React.createClass({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  propTypes: {
 | 
				
			||||||
 | 
					    status: ImmutablePropTypes.map.isRequired,
 | 
				
			||||||
 | 
					    onReblog: React.PropTypes.func.isRequired,
 | 
				
			||||||
 | 
					    onClose: React.PropTypes.func.isRequired,
 | 
				
			||||||
 | 
					    intl: React.PropTypes.object.isRequired
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  mixins: [PureRenderMixin],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  handleReblog() {
 | 
				
			||||||
 | 
					    this.props.onReblog(this.props.status);
 | 
				
			||||||
 | 
					    this.props.onClose();
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  handleOpenMedia() {
 | 
				
			||||||
 | 
					    // do nothing"
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  render () {
 | 
				
			||||||
 | 
					    const { status, intl, onClose } = this.props;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    const reblogButton = <span><i className='fa fa-retweet' /> {intl.formatMessage(messages.reblog)}</span>;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return (
 | 
				
			||||||
 | 
					      <div className='modal-root__modal boost-modal'>
 | 
				
			||||||
 | 
					        <IconButton title={intl.formatMessage(messages.close)} icon='times' onClick={onClose} size={16} style={closeStyle} />
 | 
				
			||||||
 | 
					        <div>
 | 
				
			||||||
 | 
					          <DetailedStatus status={status} onOpenMedia={this.handleOpenMedia} />
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					        <div style={buttonContainerStyle}>
 | 
				
			||||||
 | 
					          <Button text={reblogButton} onClick={this.handleReblog} />
 | 
				
			||||||
 | 
					        </div>
 | 
				
			||||||
 | 
					      </div>
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export default injectIntl(BoostModal);
 | 
				
			||||||
| 
						 | 
					@ -1,9 +1,11 @@
 | 
				
			||||||
import PureRenderMixin from 'react-addons-pure-render-mixin';
 | 
					import PureRenderMixin from 'react-addons-pure-render-mixin';
 | 
				
			||||||
import MediaModal from './media_modal';
 | 
					import MediaModal from './media_modal';
 | 
				
			||||||
 | 
					import BoostModal from './boost_modal';
 | 
				
			||||||
import { TransitionMotion, spring } from 'react-motion';
 | 
					import { TransitionMotion, spring } from 'react-motion';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const MODAL_COMPONENTS = {
 | 
					const MODAL_COMPONENTS = {
 | 
				
			||||||
  'MEDIA': MediaModal
 | 
					  'MEDIA': MediaModal,
 | 
				
			||||||
 | 
					  'BOOST': BoostModal
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const ModalRoot = React.createClass({
 | 
					const ModalRoot = React.createClass({
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| 
						 | 
					@ -1180,7 +1180,7 @@ a.status__content__spoiler-link {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@import 'boost';
 | 
					@import 'boost';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button i.fa-retweet {
 | 
					button.icon-button i.fa-retweet {
 | 
				
			||||||
  height: 19px;
 | 
					  height: 19px;
 | 
				
			||||||
  width: 22px;
 | 
					  width: 22px;
 | 
				
			||||||
  background-position: 0 0;
 | 
					  background-position: 0 0;
 | 
				
			||||||
| 
						 | 
					@ -1192,7 +1192,7 @@ button i.fa-retweet {
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
button.active i.fa-retweet {
 | 
					button.icon-button.active i.fa-retweet {
 | 
				
			||||||
  transition-duration: 0.9s;
 | 
					  transition-duration: 0.9s;
 | 
				
			||||||
  background-position: 0 100%;
 | 
					  background-position: 0 100%;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					@ -1896,3 +1896,32 @@ button.active i.fa-retweet {
 | 
				
			||||||
    max-height: 80vh;
 | 
					    max-height: 80vh;
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					.boost-modal {
 | 
				
			||||||
 | 
					  display: block;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  color: white;
 | 
				
			||||||
 | 
					  background: lighten($color1, 13%);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  max-width: 90vw;
 | 
				
			||||||
 | 
					  width: 480px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  padding-top: 25px;
 | 
				
			||||||
 | 
					  border-radius: 3px;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  position: relative;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  & .detailed-status {
 | 
				
			||||||
 | 
					    pointer-events: none;
 | 
				
			||||||
 | 
					    max-height: 60vh;
 | 
				
			||||||
 | 
					    overflow-y: auto;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  & > .icon-button {
 | 
				
			||||||
 | 
					    color: lighten($color1, 40%);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    &:hover, &:active {
 | 
				
			||||||
 | 
					      color: lighten($color1, 60%);
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue