Implement missing hotkeys for notifications (#9927)
This commit is contained in:
		
							parent
							
								
									e2a5be6e9a
								
							
						
					
					
						commit
						ec5bd8b8bb
					
				@ -29,6 +29,10 @@ class Notification extends ImmutablePureComponent {
 | 
			
		||||
    onMoveUp: PropTypes.func.isRequired,
 | 
			
		||||
    onMoveDown: PropTypes.func.isRequired,
 | 
			
		||||
    onMention: PropTypes.func.isRequired,
 | 
			
		||||
    onFavourite: PropTypes.func.isRequired,
 | 
			
		||||
    onReblog: PropTypes.func.isRequired,
 | 
			
		||||
    onToggleHidden: PropTypes.func.isRequired,
 | 
			
		||||
    status: PropTypes.option,
 | 
			
		||||
    intl: PropTypes.object.isRequired,
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
@ -64,14 +68,32 @@ class Notification extends ImmutablePureComponent {
 | 
			
		||||
    onMention(notification.get('account'), this.context.router.history);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleHotkeyFavourite = () => {
 | 
			
		||||
    const { status } = this.props;
 | 
			
		||||
    if (status) this.props.onFavourite(status);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleHotkeyBoost = e => {
 | 
			
		||||
    const { status } = this.props;
 | 
			
		||||
    if (status) this.props.onReblog(status, e);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  handleHotkeyToggleHidden = () => {
 | 
			
		||||
    const { status } = this.props;
 | 
			
		||||
    if (status) this.props.onToggleHidden(status);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  getHandlers () {
 | 
			
		||||
    return {
 | 
			
		||||
      moveUp: this.handleMoveUp,
 | 
			
		||||
      moveDown: this.handleMoveDown,
 | 
			
		||||
      reply: this.handleMention,
 | 
			
		||||
      favourite: this.handleHotkeyFavourite,
 | 
			
		||||
      boost: this.handleHotkeyBoost,
 | 
			
		||||
      mention: this.handleMention,
 | 
			
		||||
      open: this.handleOpen,
 | 
			
		||||
      openProfile: this.handleOpenProfile,
 | 
			
		||||
      mention: this.handleMention,
 | 
			
		||||
      reply: this.handleMention,
 | 
			
		||||
      moveUp: this.handleMoveUp,
 | 
			
		||||
      moveDown: this.handleMoveDown,
 | 
			
		||||
      toggleHidden: this.handleHotkeyToggleHidden,
 | 
			
		||||
    };
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@ -1,14 +1,31 @@
 | 
			
		||||
import { connect } from 'react-redux';
 | 
			
		||||
import { makeGetNotification } from '../../../selectors';
 | 
			
		||||
import { makeGetNotification, makeGetStatus } from '../../../selectors';
 | 
			
		||||
import Notification from '../components/notification';
 | 
			
		||||
import { openModal } from '../../../actions/modal';
 | 
			
		||||
import { mentionCompose } from '../../../actions/compose';
 | 
			
		||||
import {
 | 
			
		||||
  reblog,
 | 
			
		||||
  favourite,
 | 
			
		||||
  unreblog,
 | 
			
		||||
  unfavourite,
 | 
			
		||||
} from '../../../actions/interactions';
 | 
			
		||||
import {
 | 
			
		||||
  hideStatus,
 | 
			
		||||
  revealStatus,
 | 
			
		||||
} from '../../../actions/statuses';
 | 
			
		||||
import { boostModal } from '../../../initial_state';
 | 
			
		||||
 | 
			
		||||
const makeMapStateToProps = () => {
 | 
			
		||||
  const getNotification = makeGetNotification();
 | 
			
		||||
  const getStatus = makeGetStatus();
 | 
			
		||||
 | 
			
		||||
  const mapStateToProps = (state, props) => ({
 | 
			
		||||
    notification: getNotification(state, props.notification, props.accountId),
 | 
			
		||||
  });
 | 
			
		||||
  const mapStateToProps = (state, props) => {
 | 
			
		||||
    const notification = getNotification(state, props.notification, props.accountId);
 | 
			
		||||
    return {
 | 
			
		||||
      notification: notification,
 | 
			
		||||
      status: notification.get('status') ? getStatus(state, { id: notification.get('status') }) : null,
 | 
			
		||||
    };
 | 
			
		||||
  };
 | 
			
		||||
 | 
			
		||||
  return mapStateToProps;
 | 
			
		||||
};
 | 
			
		||||
@ -17,6 +34,38 @@ const mapDispatchToProps = dispatch => ({
 | 
			
		||||
  onMention: (account, router) => {
 | 
			
		||||
    dispatch(mentionCompose(account, router));
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onModalReblog (status) {
 | 
			
		||||
    dispatch(reblog(status));
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onReblog (status, e) {
 | 
			
		||||
    if (status.get('reblogged')) {
 | 
			
		||||
      dispatch(unreblog(status));
 | 
			
		||||
    } else {
 | 
			
		||||
      if (e.shiftKey || !boostModal) {
 | 
			
		||||
        this.onModalReblog(status);
 | 
			
		||||
      } else {
 | 
			
		||||
        dispatch(openModal('BOOST', { status, onReblog: this.onModalReblog }));
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onFavourite (status) {
 | 
			
		||||
    if (status.get('favourited')) {
 | 
			
		||||
      dispatch(unfavourite(status));
 | 
			
		||||
    } else {
 | 
			
		||||
      dispatch(favourite(status));
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
 | 
			
		||||
  onToggleHidden (status) {
 | 
			
		||||
    if (status.get('hidden')) {
 | 
			
		||||
      dispatch(revealStatus(status.get('id')));
 | 
			
		||||
    } else {
 | 
			
		||||
      dispatch(hideStatus(status.get('id')));
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
});
 | 
			
		||||
 | 
			
		||||
export default connect(makeMapStateToProps, mapDispatchToProps)(Notification);
 | 
			
		||||
 | 
			
		||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user