skip ActionCable for follow/unfollow/block events, instead clear UI from blocked account's posts instantly if block request succeeds. Add forgotten i18n for sensitive content
		
			
				
	
	
		
			107 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			107 lines
		
	
	
	
		
			2.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
import { connect } from 'react-redux';
 | 
						|
import Status from '../components/status';
 | 
						|
import { makeGetStatus } from '../selectors';
 | 
						|
import {
 | 
						|
  replyCompose,
 | 
						|
  mentionCompose
 | 
						|
} from '../actions/compose';
 | 
						|
import {
 | 
						|
  reblog,
 | 
						|
  favourite,
 | 
						|
  unreblog,
 | 
						|
  unfavourite
 | 
						|
} from '../actions/interactions';
 | 
						|
import { blockAccount } from '../actions/accounts';
 | 
						|
import { deleteStatus } from '../actions/statuses';
 | 
						|
import { openMedia } from '../actions/modal';
 | 
						|
import { createSelector } from 'reselect'
 | 
						|
 | 
						|
const mapStateToProps = (state, props) => ({
 | 
						|
  statusBase: state.getIn(['statuses', props.id]),
 | 
						|
  me: state.getIn(['meta', 'me'])
 | 
						|
});
 | 
						|
 | 
						|
const makeMapStateToPropsInner = () => {
 | 
						|
  const getStatus = (() => {
 | 
						|
    return createSelector(
 | 
						|
      [
 | 
						|
        (_, base)     => base,
 | 
						|
        (state, base) => (base ? state.getIn(['accounts', base.get('account')]) : null),
 | 
						|
        (state, base) => (base ? state.getIn(['statuses', base.get('reblog')], null) : null)
 | 
						|
      ],
 | 
						|
 | 
						|
      (base, account, reblog) => (base ? base.set('account', account).set('reblog', reblog) : null)
 | 
						|
    );
 | 
						|
  })();
 | 
						|
 | 
						|
  const mapStateToProps = (state, { statusBase }) => ({
 | 
						|
    status: getStatus(state, statusBase)
 | 
						|
  });
 | 
						|
 | 
						|
  return mapStateToProps;
 | 
						|
};
 | 
						|
 | 
						|
const makeMapStateToPropsLast = () => {
 | 
						|
  const getStatus = (() => {
 | 
						|
    return createSelector(
 | 
						|
      [
 | 
						|
        (_, status)     => status,
 | 
						|
        (state, status) => (status ? state.getIn(['accounts', status.getIn(['reblog', 'account'])], null) : null)
 | 
						|
      ],
 | 
						|
 | 
						|
      (status, reblogAccount) => (status && status.get('reblog') ? status.setIn(['reblog', 'account'], reblogAccount) : status)
 | 
						|
    );
 | 
						|
  })();
 | 
						|
 | 
						|
  const mapStateToProps = (state, { status }) => ({
 | 
						|
    status: getStatus(state, status)
 | 
						|
  });
 | 
						|
 | 
						|
  return mapStateToProps;
 | 
						|
};
 | 
						|
 | 
						|
const mapDispatchToProps = (dispatch) => ({
 | 
						|
 | 
						|
  onReply (status, router) {
 | 
						|
    dispatch(replyCompose(status, router));
 | 
						|
  },
 | 
						|
 | 
						|
  onReblog (status) {
 | 
						|
    if (status.get('reblogged')) {
 | 
						|
      dispatch(unreblog(status));
 | 
						|
    } else {
 | 
						|
      dispatch(reblog(status));
 | 
						|
    }
 | 
						|
  },
 | 
						|
 | 
						|
  onFavourite (status) {
 | 
						|
    if (status.get('favourited')) {
 | 
						|
      dispatch(unfavourite(status));
 | 
						|
    } else {
 | 
						|
      dispatch(favourite(status));
 | 
						|
    }
 | 
						|
  },
 | 
						|
 | 
						|
  onDelete (status) {
 | 
						|
    dispatch(deleteStatus(status.get('id')));
 | 
						|
  },
 | 
						|
 | 
						|
  onMention (account) {
 | 
						|
    dispatch(mentionCompose(account));
 | 
						|
  },
 | 
						|
 | 
						|
  onOpenMedia (url) {
 | 
						|
    dispatch(openMedia(url));
 | 
						|
  },
 | 
						|
 | 
						|
  onBlock (account) {
 | 
						|
    dispatch(blockAccount(account.get('id')));
 | 
						|
  }
 | 
						|
 | 
						|
});
 | 
						|
 | 
						|
export default connect(mapStateToProps, mapDispatchToProps)(
 | 
						|
  connect(makeMapStateToPropsInner)(
 | 
						|
    connect(makeMapStateToPropsLast)(Status)
 | 
						|
  )
 | 
						|
);
 |