Switch to compose route when replying and compose is not mounted
This commit is contained in:
		
							parent
							
								
									93577f74e7
								
							
						
					
					
						commit
						d32e0364f9
					
				
					 6 changed files with 56 additions and 14 deletions
				
			
		| 
						 | 
					@ -19,6 +19,9 @@ export const COMPOSE_SUGGESTIONS_CLEAR = 'COMPOSE_SUGGESTIONS_CLEAR';
 | 
				
			||||||
export const COMPOSE_SUGGESTIONS_READY = 'COMPOSE_SUGGESTIONS_READY';
 | 
					export const COMPOSE_SUGGESTIONS_READY = 'COMPOSE_SUGGESTIONS_READY';
 | 
				
			||||||
export const COMPOSE_SUGGESTION_SELECT = 'COMPOSE_SUGGESTION_SELECT';
 | 
					export const COMPOSE_SUGGESTION_SELECT = 'COMPOSE_SUGGESTION_SELECT';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export const COMPOSE_MOUNT   = 'COMPOSE_MOUNT';
 | 
				
			||||||
 | 
					export const COMPOSE_UNMOUNT = 'COMPOSE_UNMOUNT';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function changeCompose(text) {
 | 
					export function changeCompose(text) {
 | 
				
			||||||
  return {
 | 
					  return {
 | 
				
			||||||
    type: COMPOSE_CHANGE,
 | 
					    type: COMPOSE_CHANGE,
 | 
				
			||||||
| 
						 | 
					@ -26,10 +29,16 @@ export function changeCompose(text) {
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export function replyCompose(status) {
 | 
					export function replyCompose(status, router) {
 | 
				
			||||||
  return {
 | 
					  return (dispatch, getState) => {
 | 
				
			||||||
    type: COMPOSE_REPLY,
 | 
					    dispatch({
 | 
				
			||||||
    status: status
 | 
					      type: COMPOSE_REPLY,
 | 
				
			||||||
 | 
					      status: status
 | 
				
			||||||
 | 
					    });
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    if (!getState().getIn(['compose', 'mounted'])) {
 | 
				
			||||||
 | 
					      router.push('/statuses/new');
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -176,3 +185,15 @@ export function selectComposeSuggestion(position, accountId) {
 | 
				
			||||||
    });
 | 
					    });
 | 
				
			||||||
  };
 | 
					  };
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function mountCompose() {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: COMPOSE_MOUNT
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					export function unmountCompose() {
 | 
				
			||||||
 | 
					  return {
 | 
				
			||||||
 | 
					    type: COMPOSE_UNMOUNT
 | 
				
			||||||
 | 
					  };
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -13,6 +13,11 @@ const messages = defineMessages({
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const StatusActionBar = React.createClass({
 | 
					const StatusActionBar = React.createClass({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  contextTypes: {
 | 
				
			||||||
 | 
					    router: React.PropTypes.object
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  propTypes: {
 | 
					  propTypes: {
 | 
				
			||||||
    status: ImmutablePropTypes.map.isRequired,
 | 
					    status: ImmutablePropTypes.map.isRequired,
 | 
				
			||||||
    onReply: React.PropTypes.func,
 | 
					    onReply: React.PropTypes.func,
 | 
				
			||||||
| 
						 | 
					@ -25,7 +30,7 @@ const StatusActionBar = React.createClass({
 | 
				
			||||||
  mixins: [PureRenderMixin],
 | 
					  mixins: [PureRenderMixin],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleReplyClick () {
 | 
					  handleReplyClick () {
 | 
				
			||||||
    this.props.onReply(this.props.status);
 | 
					    this.props.onReply(this.props.status, this.context.router);
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleFavouriteClick () {
 | 
					  handleFavouriteClick () {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -61,8 +61,8 @@ const makeMapStateToPropsLast = () => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const mapDispatchToProps = (dispatch) => ({
 | 
					const mapDispatchToProps = (dispatch) => ({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onReply (status) {
 | 
					  onReply (status, router) {
 | 
				
			||||||
    dispatch(replyCompose(status));
 | 
					    dispatch(replyCompose(status, router));
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  onReblog (status) {
 | 
					  onReblog (status) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,12 +1,13 @@
 | 
				
			||||||
import Drawer               from './components/drawer';
 | 
					import Drawer from './components/drawer';
 | 
				
			||||||
import ComposeFormContainer from './containers/compose_form_container';
 | 
					import ComposeFormContainer from './containers/compose_form_container';
 | 
				
			||||||
import UploadFormContainer  from './containers/upload_form_container';
 | 
					import UploadFormContainer from './containers/upload_form_container';
 | 
				
			||||||
import NavigationContainer  from './containers/navigation_container';
 | 
					import NavigationContainer from './containers/navigation_container';
 | 
				
			||||||
import PureRenderMixin      from 'react-addons-pure-render-mixin';
 | 
					import PureRenderMixin from 'react-addons-pure-render-mixin';
 | 
				
			||||||
import SuggestionsContainer from './containers/suggestions_container';
 | 
					import SuggestionsContainer from './containers/suggestions_container';
 | 
				
			||||||
import SearchContainer      from './containers/search_container';
 | 
					import SearchContainer from './containers/search_container';
 | 
				
			||||||
import { fetchSuggestions } from '../../actions/suggestions';
 | 
					import { fetchSuggestions } from '../../actions/suggestions';
 | 
				
			||||||
import { connect }          from 'react-redux';
 | 
					import { connect } from 'react-redux';
 | 
				
			||||||
 | 
					import { mountCompose, unmountCompose } from '../../actions/compose';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const Compose = React.createClass({
 | 
					const Compose = React.createClass({
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,9 +18,14 @@ const Compose = React.createClass({
 | 
				
			||||||
  mixins: [PureRenderMixin],
 | 
					  mixins: [PureRenderMixin],
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  componentDidMount () {
 | 
					  componentDidMount () {
 | 
				
			||||||
 | 
					    this.props.dispatch(mountCompose());
 | 
				
			||||||
    this.props.dispatch(fetchSuggestions());
 | 
					    this.props.dispatch(fetchSuggestions());
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  componentWillUnmount () {
 | 
				
			||||||
 | 
					    this.props.dispatch(unmountCompose());
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  render () {
 | 
					  render () {
 | 
				
			||||||
    return (
 | 
					    return (
 | 
				
			||||||
      <Drawer>
 | 
					      <Drawer>
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -38,6 +38,9 @@ const makeMapStateToProps = () => {
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const Status = React.createClass({
 | 
					const Status = React.createClass({
 | 
				
			||||||
 | 
					  contextTypes: {
 | 
				
			||||||
 | 
					    router: React.PropTypes.object
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  propTypes: {
 | 
					  propTypes: {
 | 
				
			||||||
    params: React.PropTypes.object.isRequired,
 | 
					    params: React.PropTypes.object.isRequired,
 | 
				
			||||||
| 
						 | 
					@ -64,7 +67,7 @@ const Status = React.createClass({
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleReplyClick (status) {
 | 
					  handleReplyClick (status) {
 | 
				
			||||||
    this.props.dispatch(replyCompose(status));
 | 
					    this.props.dispatch(replyCompose(status, this.context.router));
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  handleReblogClick (status) {
 | 
					  handleReblogClick (status) {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -1,4 +1,6 @@
 | 
				
			||||||
import {
 | 
					import {
 | 
				
			||||||
 | 
					  COMPOSE_MOUNT,
 | 
				
			||||||
 | 
					  COMPOSE_UNMOUNT,
 | 
				
			||||||
  COMPOSE_CHANGE,
 | 
					  COMPOSE_CHANGE,
 | 
				
			||||||
  COMPOSE_REPLY,
 | 
					  COMPOSE_REPLY,
 | 
				
			||||||
  COMPOSE_REPLY_CANCEL,
 | 
					  COMPOSE_REPLY_CANCEL,
 | 
				
			||||||
| 
						 | 
					@ -20,6 +22,7 @@ import { ACCOUNT_SET_SELF } from '../actions/accounts';
 | 
				
			||||||
import Immutable from 'immutable';
 | 
					import Immutable from 'immutable';
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const initialState = Immutable.Map({
 | 
					const initialState = Immutable.Map({
 | 
				
			||||||
 | 
					  mounted: false,
 | 
				
			||||||
  text: '',
 | 
					  text: '',
 | 
				
			||||||
  in_reply_to: null,
 | 
					  in_reply_to: null,
 | 
				
			||||||
  is_submitting: false,
 | 
					  is_submitting: false,
 | 
				
			||||||
| 
						 | 
					@ -80,6 +83,10 @@ const insertSuggestion = (state, position, completion) => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
export default function compose(state = initialState, action) {
 | 
					export default function compose(state = initialState, action) {
 | 
				
			||||||
  switch(action.type) {
 | 
					  switch(action.type) {
 | 
				
			||||||
 | 
					    case COMPOSE_MOUNT:
 | 
				
			||||||
 | 
					      return state.set('mounted', true);
 | 
				
			||||||
 | 
					    case COMPOSE_UNMOUNT:
 | 
				
			||||||
 | 
					      return state.set('mounted', false);
 | 
				
			||||||
    case COMPOSE_CHANGE:
 | 
					    case COMPOSE_CHANGE:
 | 
				
			||||||
      return state.set('text', action.text);
 | 
					      return state.set('text', action.text);
 | 
				
			||||||
    case COMPOSE_REPLY:
 | 
					    case COMPOSE_REPLY:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		
		Reference in a new issue