diff --git a/app/assets/javascripts/notes/components/discussion_jump_to_next_button.vue b/app/assets/javascripts/notes/components/discussion_jump_to_next_button.vue
new file mode 100644
index 0000000000000000000000000000000000000000..07a5bda6bcb46750eac82023999e3fa3b4d73d2d
--- /dev/null
+++ b/app/assets/javascripts/notes/components/discussion_jump_to_next_button.vue
@@ -0,0 +1,28 @@
+
+
+
+
+
+
+
diff --git a/app/assets/javascripts/notes/components/noteable_discussion.vue b/app/assets/javascripts/notes/components/noteable_discussion.vue
index 1a2b6cee09f362beaaa6155a9d033330a520632f..72d76c88232bf47840f6c8f9639f2285c50a8b96 100644
--- a/app/assets/javascripts/notes/components/noteable_discussion.vue
+++ b/app/assets/javascripts/notes/components/noteable_discussion.vue
@@ -25,6 +25,7 @@ import autosave from '../mixins/autosave';
import noteable from '../mixins/noteable';
import resolvable from '../mixins/resolvable';
import discussionNavigation from '../mixins/discussion_navigation';
+import jumpToNextDiscussionButton from './discussion_jump_to_next_button.vue';
export default {
name: 'NoteableDiscussion',
@@ -36,6 +37,7 @@ export default {
noteSignedOutWidget,
noteEditedText,
noteForm,
+ jumpToNextDiscussionButton,
toggleRepliesWidget,
placeholderNote,
placeholderSystemNote,
@@ -480,16 +482,10 @@ Please check your network connection and try again.`;
-
-
-
+
diff --git a/changelogs/unreleased/refactor-56369-extract-jump-to-next-discussion-button.yml b/changelogs/unreleased/refactor-56369-extract-jump-to-next-discussion-button.yml
new file mode 100644
index 0000000000000000000000000000000000000000..9a0d16c2d708c48e3914b169b430ddf76e7727b2
--- /dev/null
+++ b/changelogs/unreleased/refactor-56369-extract-jump-to-next-discussion-button.yml
@@ -0,0 +1,5 @@
+---
+title: Extracted JumpToNextDiscussionButton to its own component
+author: Martin Hobert
+merge_request: 24506
+type: other
diff --git a/locale/gitlab.pot b/locale/gitlab.pot
index be1f473616689f49e4c334d1396a73898a540f6f..9fb75a8313d080ed50607b8dc73d0ad8242198da 100644
--- a/locale/gitlab.pot
+++ b/locale/gitlab.pot
@@ -5632,6 +5632,9 @@ msgstr ""
msgid "MergeRequests|Discussion will be unresolved"
msgstr ""
+msgid "MergeRequests|Jump to next unresolved discussion"
+msgstr ""
+
msgid "MergeRequests|Resolve this discussion in a new issue"
msgstr ""
diff --git a/spec/javascripts/notes/components/discussion_jump_to_next_button_spec.js b/spec/javascripts/notes/components/discussion_jump_to_next_button_spec.js
new file mode 100644
index 0000000000000000000000000000000000000000..c41b29fa78847ee8396df90354d9abd6e72c15f5
--- /dev/null
+++ b/spec/javascripts/notes/components/discussion_jump_to_next_button_spec.js
@@ -0,0 +1,33 @@
+import jumpToNextDiscussionButton from '~/notes/components/discussion_jump_to_next_button.vue';
+import { shallowMount, createLocalVue } from '@vue/test-utils';
+
+const localVue = createLocalVue();
+
+describe('jumpToNextDiscussionButton', () => {
+ let wrapper;
+
+ beforeEach(() => {
+ wrapper = shallowMount(jumpToNextDiscussionButton, {
+ localVue,
+ sync: false,
+ });
+ });
+
+ afterEach(() => {
+ wrapper.destroy();
+ });
+
+ it('emits onClick event on button click', done => {
+ const button = wrapper.find({ ref: 'button' });
+
+ button.trigger('click');
+
+ localVue.nextTick(() => {
+ expect(wrapper.emitted()).toEqual({
+ onClick: [[]],
+ });
+
+ done();
+ });
+ });
+});