summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFatih Acet <acetfatih@gmail.com>2017-07-11 00:53:52 +0300
committerFatih Acet <acetfatih@gmail.com>2017-07-11 02:29:22 +0300
commit429492cf888e3e1b0fad1b8c3eab6a922687f117 (patch)
tree377a79271a70e9dbbed721cc8e9d5e7652482f4b
parent438501e5a1c0f401c8d3568a1702c533e8627b04 (diff)
downloadgitlab-ce-issue-discussions-refactor.tar.gz
IssueNotesRefactor: Implement up arrow to edit last note.issue-discussions-refactor
-rw-r--r--app/assets/javascripts/notes/components/issue_comment_form.vue13
-rw-r--r--app/assets/javascripts/notes/components/issue_note.vue10
-rw-r--r--app/assets/javascripts/notes/components/issue_note_form.vue14
-rw-r--r--app/assets/javascripts/notes/stores/issue_notes_store.js4
4 files changed, 39 insertions, 2 deletions
diff --git a/app/assets/javascripts/notes/components/issue_comment_form.vue b/app/assets/javascripts/notes/components/issue_comment_form.vue
index e4f7a1dbb79..e070ee0ff3a 100644
--- a/app/assets/javascripts/notes/components/issue_comment_form.vue
+++ b/app/assets/javascripts/notes/components/issue_comment_form.vue
@@ -4,6 +4,7 @@
import UserAvatarLink from '../../vue_shared/components/user_avatar/user_avatar_link.vue';
import MarkdownField from '../../vue_shared/components/markdown/field.vue';
import IssueNoteSignedOutWidget from './issue_note_signed_out_widget.vue';
+import eventHub from '../event_hub';
export default {
props: {},
@@ -101,6 +102,17 @@ export default {
handleError() {
new Flash('Something went wrong while adding your comment. Please try again.'); // eslint-disable-line
},
+ editMyLastNote() {
+ if (this.note === '') {
+ const myLastNoteId = $('.js-my-note').last().attr('id');
+
+ if (myLastNoteId) {
+ eventHub.$emit('EnterEditMode', {
+ noteId: parseInt(myLastNoteId.replace('note_', ''), 10),
+ });
+ }
+ }
+ },
},
mounted() {
const issuableDataEl = document.getElementById('js-issuable-app-initial-data');
@@ -143,6 +155,7 @@ export default {
ref="textarea"
slot="textarea"
placeholder="Write a comment or drag your files here..."
+ @keydown.up="editMyLastNote"
@keydown.meta.enter="handleSave()">
</textarea>
</markdown-field>
diff --git a/app/assets/javascripts/notes/components/issue_note.vue b/app/assets/javascripts/notes/components/issue_note.vue
index 1dd4786d605..e2fe638bef8 100644
--- a/app/assets/javascripts/notes/components/issue_note.vue
+++ b/app/assets/javascripts/notes/components/issue_note.vue
@@ -6,6 +6,7 @@ import UserAvatarLink from '../../vue_shared/components/user_avatar/user_avatar_
import IssueNoteHeader from './issue_note_header.vue';
import IssueNoteActions from './issue_note_actions.vue';
import IssueNoteBody from './issue_note_body.vue';
+import eventHub from '../event_hub';
export default {
props: {
@@ -37,6 +38,7 @@ export default {
return {
'is-editing': this.isEditing,
'disabled-content': this.isDeleting,
+ 'js-my-note': this.author.id === window.gon.current_user_id,
target: this.targetNoteHash === this.noteAnchorId,
};
},
@@ -100,6 +102,14 @@ export default {
this.isEditing = false;
},
},
+ created() {
+ eventHub.$on('EnterEditMode', ({ noteId }) => {
+ if (noteId === this.note.id) {
+ this.isEditing = true;
+ this.$store.dispatch('scrollToNoteIfNeeded', $(this.$el));
+ }
+ });
+ },
};
</script>
diff --git a/app/assets/javascripts/notes/components/issue_note_form.vue b/app/assets/javascripts/notes/components/issue_note_form.vue
index b322f777968..86ff8bd8c69 100644
--- a/app/assets/javascripts/notes/components/issue_note_form.vue
+++ b/app/assets/javascripts/notes/components/issue_note_form.vue
@@ -1,5 +1,6 @@
<script>
import MarkdownField from '../../vue_shared/components/markdown/field.vue';
+import eventHub from '../event_hub';
export default {
props: {
@@ -39,6 +40,18 @@ export default {
note: this.note,
});
},
+ editMyLastNote() {
+ if (this.note === '') {
+ const discussion = $(this.$el).closest('.discussion-notes');
+ const myLastNoteId = discussion.find('.js-my-note').last().attr('id');
+
+ if (myLastNoteId) {
+ eventHub.$emit('EnterEditMode', {
+ noteId: parseInt(myLastNoteId.replace('note_', ''), 10),
+ });
+ }
+ }
+ },
},
computed: {
isDirty() {
@@ -75,6 +88,7 @@ export default {
slot="textarea"
placeholder="Write a comment or drag your files here..."
@keydown.meta.enter="handleUpdate"
+ @keydown.up="editMyLastNote"
@keydown.esc="cancelHandler(true)">
</textarea>
</markdown-field>
diff --git a/app/assets/javascripts/notes/stores/issue_notes_store.js b/app/assets/javascripts/notes/stores/issue_notes_store.js
index 3e6b883bd4b..a5811515fc4 100644
--- a/app/assets/javascripts/notes/stores/issue_notes_store.js
+++ b/app/assets/javascripts/notes/stores/issue_notes_store.js
@@ -197,10 +197,10 @@ const actions = {
if (!skipMutalityCheck && (awardName === 'thumbsup' || awardName === 'thumbsdown')) {
const counterAward = awardName === 'thumbsup' ? 'thumbsdown' : 'thumbsup';
- const note = context.getters.notesById[noteId];
+ const targetNote = context.getters.notesById[noteId];
let amIAwarded = false;
- note.award_emoji.forEach((a) => {
+ targetNote.award_emoji.forEach((a) => {
if (a.name === counterAward && a.user.id === window.gon.current_user_id) {
amIAwarded = true;
}