debian-mirror-gitlab/app/assets/javascripts/notes/mixins/discussion_navigation.js

92 lines
2.3 KiB
JavaScript
Raw Normal View History

2020-03-13 15:44:24 +05:30
import { mapGetters, mapActions, mapState } from 'vuex';
2018-11-18 11:00:15 +05:30
import { scrollToElement } from '~/lib/utils/common_utils';
2019-02-15 15:39:39 +05:30
import eventHub from '../../notes/event_hub';
2018-11-18 11:00:15 +05:30
export default {
2020-03-13 15:44:24 +05:30
computed: {
...mapGetters([
'nextUnresolvedDiscussionId',
'previousUnresolvedDiscussionId',
'getDiscussion',
]),
...mapState({
currentDiscussionId: state => state.notes.currentDiscussionId,
}),
},
2018-11-18 11:00:15 +05:30
methods: {
2020-03-13 15:44:24 +05:30
...mapActions(['expandDiscussion', 'setCurrentDiscussionId']),
2019-02-15 15:39:39 +05:30
diffsJump(id) {
const selector = `ul.notes[data-discussion-id="${id}"]`;
2018-11-18 11:00:15 +05:30
2019-02-15 15:39:39 +05:30
eventHub.$once('scrollToDiscussion', () => {
const el = document.querySelector(selector);
2019-01-03 12:48:30 +05:30
2018-11-18 11:00:15 +05:30
if (el) {
2019-01-03 12:48:30 +05:30
scrollToElement(el);
2019-02-15 15:39:39 +05:30
2018-11-18 11:00:15 +05:30
return true;
}
2019-02-15 15:39:39 +05:30
return false;
});
this.expandDiscussion({ discussionId: id });
},
discussionJump(id) {
const selector = `div.discussion[data-discussion-id="${id}"]`;
const el = document.querySelector(selector);
this.expandDiscussion({ discussionId: id });
if (el) {
scrollToElement(el);
return true;
2018-11-18 11:00:15 +05:30
}
return false;
},
2020-01-01 13:55:28 +05:30
switchToDiscussionsTabAndJumpTo(id) {
window.mrTabs.eventHub.$once('MergeRequestTabChange', () => {
setTimeout(() => this.discussionJump(id), 0);
});
window.mrTabs.tabShown('show');
},
jumpToDiscussion(discussion) {
const { id, diff_discussion: isDiffDiscussion } = discussion;
2019-02-15 15:39:39 +05:30
if (id) {
const activeTab = window.mrTabs.currentAction;
2020-01-01 13:55:28 +05:30
if (activeTab === 'diffs' && isDiffDiscussion) {
2019-02-15 15:39:39 +05:30
this.diffsJump(id);
2020-01-01 13:55:28 +05:30
} else if (activeTab === 'show') {
2019-02-15 15:39:39 +05:30
this.discussionJump(id);
2020-01-01 13:55:28 +05:30
} else {
this.switchToDiscussionsTabAndJumpTo(id);
2019-02-15 15:39:39 +05:30
}
}
},
2020-03-13 15:44:24 +05:30
jumpToNextDiscussion() {
this.handleDiscussionJump(this.nextUnresolvedDiscussionId);
},
jumpToPreviousDiscussion() {
this.handleDiscussionJump(this.previousUnresolvedDiscussionId);
},
handleDiscussionJump(fn) {
const isDiffView = window.mrTabs.currentAction === 'diffs';
const targetId = fn(this.currentDiscussionId, isDiffView);
const discussion = this.getDiscussion(targetId);
this.jumpToDiscussion(discussion);
this.setCurrentDiscussionId(targetId);
},
2018-11-18 11:00:15 +05:30
},
};