diff options
author | Fatih Acet <acetfatih@gmail.com> | 2017-06-15 03:58:46 +0300 |
---|---|---|
committer | Fatih Acet <acetfatih@gmail.com> | 2017-07-21 22:35:25 +0300 |
commit | 7433377adf6e716696f9cc7521053d8ec97810b7 (patch) | |
tree | e161008749fbb2cf97d6bb8f40e013b4481bd1e4 /app/assets/javascripts/notes/components | |
parent | 36f84ce79e6d1fefdfd4c3c1b18d76874160e66a (diff) | |
download | gitlab-ce-7433377adf6e716696f9cc7521053d8ec97810b7.tar.gz |
IssueNotesRefactor: Restrict :+1: and :-1: on your own note.
Diffstat (limited to 'app/assets/javascripts/notes/components')
4 files changed, 36 insertions, 16 deletions
diff --git a/app/assets/javascripts/notes/components/issue_note.vue b/app/assets/javascripts/notes/components/issue_note.vue index ef18ff4b45f..191555fd979 100644 --- a/app/assets/javascripts/notes/components/issue_note.vue +++ b/app/assets/javascripts/notes/components/issue_note.vue @@ -14,7 +14,7 @@ export default { data() { return { isEditing: false, - } + }; }, components: { UserAvatarLink, @@ -31,8 +31,8 @@ export default { editHandler() { this.isEditing = true; }, - formUpdateHandler(data) { - console.log('update requested', data); + formUpdateHandler() { + // console.log('update requested', data); }, formCancelHandler() { this.isEditing = false; diff --git a/app/assets/javascripts/notes/components/issue_note_awards_list.vue b/app/assets/javascripts/notes/components/issue_note_awards_list.vue index 5765445a73d..825ebb7e740 100644 --- a/app/assets/javascripts/notes/components/issue_note_awards_list.vue +++ b/app/assets/javascripts/notes/components/issue_note_awards_list.vue @@ -10,13 +10,20 @@ export default { type: Array, required: true, }, + noteAuthorId: { + type: Number, + required: true, + }, }, data() { + const userId = window.gon.current_user_id; + return { emojiSmiling, emojiSmile, emojiSmiley, - canAward: !!window.gon.current_user_id, + canAward: !!userId, + myUserId: userId, }; }, computed: { @@ -48,9 +55,11 @@ export default { delete awards.thumbsdown; } - for (let key in awards) { + // Because for-in forbidden + const keys = Object.keys(awards); + keys.forEach((key) => { orderedAwards[key] = awards[key]; - }; + }); return orderedAwards; }, @@ -59,27 +68,37 @@ export default { getAwardHTML(name) { return glEmojiTag(name); }, - getAwardClassBindings(awardList) { + getAwardClassBindings(awardList, awardName) { return { active: this.amIAwarded(awardList), - disabled: !this.canAward, + disabled: !this.canInteractWithEmoji(awardList, awardName), }; }, + canInteractWithEmoji(awardList, awardName) { + let isAllowed = true; + const restrictedEmojis = ['thumbsup', 'thumbsdown']; + const { myUserId, noteAuthorId } = this; + + // Users can not add :+1: and :-1: to their notes + if (myUserId === noteAuthorId && restrictedEmojis.indexOf(awardName) > -1) { + isAllowed = false; + } + + return this.canAward && isAllowed; + }, amIAwarded(awardList) { - const myUserId = window.gon.current_user_id; - const isAwarded = awardList.filter(award => award.user.id === myUserId); + const isAwarded = awardList.filter(award => award.user.id === this.myUserId); return isAwarded.length; }, awardTitle(awardsList) { const amIAwarded = this.amIAwarded(awardsList); - const myUserId = window.gon.current_user_id; const TOOLTIP_NAME_COUNT = amIAwarded ? 9 : 10; let awardList = awardsList; // Filter myself from list if I am awarded. if (amIAwarded) { - awardList = awardList.filter(award => award.user.id !== myUserId); + awardList = awardList.filter(award => award.user.id !== this.myUserId); } // Get only 9-10 usernames to show in tooltip text. @@ -120,7 +139,7 @@ export default { <button v-for="(awardList, awardName) in groupedAwards" class="btn award-control has-tooltip" - :class="getAwardClassBindings(awardList)" + :class="getAwardClassBindings(awardList, awardName)" :title="awardTitle(awardList)" data-placement="bottom" type="button"> diff --git a/app/assets/javascripts/notes/components/issue_note_body.vue b/app/assets/javascripts/notes/components/issue_note_body.vue index e5c3ddf0d0c..4ce7d61251c 100644 --- a/app/assets/javascripts/notes/components/issue_note_body.vue +++ b/app/assets/javascripts/notes/components/issue_note_body.vue @@ -21,7 +21,7 @@ export default { formCancelHandler: { type: Function, required: true, - } + }, }, components: { IssueNoteEditedText, @@ -58,6 +58,7 @@ export default { actionText="Edited" /> <issue-note-awards-list v-if="note.award_emoji.length" - :awards="note.award_emoji" /> + :awards="note.award_emoji" + :noteAuthorId="note.author.id" /> </div> </template> diff --git a/app/assets/javascripts/notes/components/issue_note_form.vue b/app/assets/javascripts/notes/components/issue_note_form.vue index 93d4acbb20a..86fd9c063e9 100644 --- a/app/assets/javascripts/notes/components/issue_note_form.vue +++ b/app/assets/javascripts/notes/components/issue_note_form.vue @@ -21,7 +21,7 @@ export default { note: this.noteBody, markdownPreviewUrl: '', markdownDocsUrl: '', - } + }; }, components: { MarkdownField, |