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)
 | |
|   )
 | |
| );
 |