debian-mirror-gitlab/app/assets/javascripts/notes/components/discussion_keyboard_navigator.vue

56 lines
1.4 KiB
Vue
Raw Normal View History

2019-10-12 21:52:04 +05:30
<script>
/* global Mousetrap */
import 'mousetrap';
import { mapGetters, mapActions } from 'vuex';
import discussionNavigation from '~/notes/mixins/discussion_navigation';
export default {
mixins: [discussionNavigation],
props: {
isDiffView: {
type: Boolean,
required: false,
default: false,
},
},
data() {
return {
currentDiscussionId: null,
};
},
computed: {
2020-01-01 13:55:28 +05:30
...mapGetters([
'nextUnresolvedDiscussionId',
'previousUnresolvedDiscussionId',
'getDiscussion',
]),
2019-10-12 21:52:04 +05:30
},
mounted() {
Mousetrap.bind('n', () => this.jumpToNextDiscussion());
Mousetrap.bind('p', () => this.jumpToPreviousDiscussion());
},
beforeDestroy() {
Mousetrap.unbind('n');
Mousetrap.unbind('p');
},
methods: {
...mapActions(['expandDiscussion']),
jumpToNextDiscussion() {
const nextId = this.nextUnresolvedDiscussionId(this.currentDiscussionId, this.isDiffView);
2020-01-01 13:55:28 +05:30
const nextDiscussion = this.getDiscussion(nextId);
this.jumpToDiscussion(nextDiscussion);
2019-10-12 21:52:04 +05:30
this.currentDiscussionId = nextId;
},
jumpToPreviousDiscussion() {
const prevId = this.previousUnresolvedDiscussionId(this.currentDiscussionId, this.isDiffView);
2020-01-01 13:55:28 +05:30
const prevDiscussion = this.getDiscussion(prevId);
this.jumpToDiscussion(prevDiscussion);
2019-10-12 21:52:04 +05:30
this.currentDiscussionId = prevId;
},
},
render() {
return this.$slots.default;
},
};
</script>